2014/02/18
第2回 MariaDB/MySQL コミュニティイベント
中谷 翔
スライド: http://p.tl/c3C4
SQLiteのDBファイルを扱うMySQL/MariaDBストレージエンジンエンジンを開発
・・・
$ sqlite3 /home/nakatani/foobar.sqlite
sqlite> .schema
CREATE TABLE T0 (col0 INT);
sqlite> select * from T0;
777
333
111
888
$ mysql
mysql> use test
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| ... |
+----------------+
mysql> create table T0 engine=mysqlite file_name='/home/nakatani/foobar.sqlite,T0';
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| ... |
| T0 |
+----------------+
mysql> select * from T0;
+------+
| col0 |
+------+
| 777 |
| 333 |
| 111 |
| 888 |
+------+
SQLiteのDBファイルを読み書きし、クエリ実行はMySQL/MariaDBに任せる
create table T engine=mysqlite file_name='a.sqlite,T'
a.sqlite
ファイルをオープンselect * from T
next
) でSQLite DBファイルから T
のレコードを順々に読むmysql
クライアント同士ともsqlite3
プロセスとも起こり得るfcntl(2)
によるファイルロックで reader-writer ロックfcntl(2)
を使用しているCREATE TABLE
やCREATE INDEX
のようなDDLは得られるinit_from_sql_statement_string()
という謎APIがソフトウェア | バージョン |
---|---|
SQLite | 3.7.16 |
MariaDB | 10.0.2 |
OS | Linux 2.6.32-5-amd64 |
ハードウェア | スペック |
---|---|
CPU | Intel Xeon E5530 @ 2.40 GHz |
メモリ | 24GB |
-- T: (key_col INT, val_col INT), 10,000,000 行
-- Sort
select * from T order by val_col limit 5;
-- Group-by
select avg(val_col) from T group by key_col; -- key_colは5種類
-- Scan-only
select count(*) from T;
-- T: (key_col INT, val_col INT), 250,000 行
-- S: (key_col INT, val_col INT), 100 行
-- Join
select count(*) from T, S where T.key_col = S.key_col;
Thank you for listening!