【誰もいないから】インメモリDBを作ろう【今のうち】 (30レス)
1-

1
(3): 2014/04/07(月)19:14 ID:vEOnylDdo(1/2) AAS
最近盛り上がってるインメモリDBを作ろうかと思いますよ。
基本知識がないので調べながら、なまらまったり作る。

WIKIにはmemsqlとか高速屋とか乗ってないね。
外部リンク:ja.wikipedia.org

かわいいリレーショナル・データベース
外部リンク:d.hatena.ne.jp
11: 2014/07/07(月)19:46 ID:YkjIc2l9U(1/2) AAS
落ちてなかった!
やっと仕事が一段落したので作成再開。
selectにしろwhereにしろ一時的なtableを作成するという考え方を採用すると
全てがクリアになります。
joinの前にテーブルのカラムの持ち方とwhereを実装します。
カラムは今までは名前だったけどテーブル名と名前で管理する事にします。
joinしたときとかに区別できるように。後々の演算にも便利。カラム名だけで参照
した場合には、登録順で一番最初にマッチした名前になります。カラムには将来の拡張の
ために数値、文字などのenumも持たせておきます。

あと一応複数のテーブルを扱えるようにDatabaseクラスも用意します。Databaseクラスは
省12
12: 2014/07/07(月)19:47 ID:YkjIc2l9U(2/2) AAS
ありゃ。ideoneのソース間違えました。
こちらから見てください。
外部リンク:ideone.com
例題はかわいいリレーショナル・データベースの
ものにしてみました。
13
(1): 2014/07/07(月)20:37 ID:mDpRDAyXy(1) AAS
今オラクルの勉強してる俺に取ってかなりタイムリーなスレだ
14: 2014/07/08(火)09:55 ID:rMFc8YmDB(1) AAS
>>13
ありがとう。不明な点とかあったら補足します。
今日はjoin実装します。joinって何?ってところからスタートですがw
15: 2014/07/09(水)20:39 ID:naIqrL5h5(1) AAS
joinができました。
joinにはinner join,left join, right join,outer joinとかがあります。
DBによってはfull outer joinがなかったり方言があるんですね。知らなかった。

さて普通にjoinと書くとinner joinが呼ばれるようです、多分。2つのDBをある
条件で接続したときに対応するレコードがあるレコードだけを取得するのがinner joinです。
同様に左側全レコードに対応する要素があれば転記するのがleft join,
右側全レコードに対応する要素があれば転記するのがright joinです。
まずは普通のjoinを作ります。

前にwhereで作ったルーチンを流用して2つのDBについて条件値が合致すれば2つのDBから
転記するように作ります。転記はmemmoveにて実装されてるようなのでそれなりに早いはず。
省13
16
(1): 2014/07/09(水)23:43 ID:PzoSUll2D(1) AAS
オラクルとそんな変わらないんだね
natural join
join using
join on
inner join
outer join
だっけ。
そしてnatural joinとjoin using
で結合に使われる列に、表別名は使えないという制約があるという…、
17: 2014/07/10(木)12:19 ID:7YX29kERu(1) AAS
>>16
join usingは使った事なかったです。複数テーブルで指定された項目名が
同値のものをつなぐんですね。エイリアス使うと構文解析が追いつかないんでしょうか
実装するとしても確かに困りますね
join = inner join
left join = left outer join
right join = right outer join
なんですね。cross joinとかnatural joinは理解してないから実装しないかなぁ

通常のDBだとデータの対象はハードディスクになりますからBツリーとかディスク
アクセスを高速に行えるように作りますがインメモリDBでは省メモリでなるべく
省2
18: 2014/07/15(火)11:03 ID:KxYr2ZslW(1) AAS
orderというかデータの持たせ方に悩んでます
どうせインメモリなんだからデータはすべて探索可能な
ハッシュとかスキップリストでの実装はどうかと考えてます

いい考えがでないようならまずはリストで実験してみます
19: 2014/09/16(火)00:38 ID:T3HpIYnP9(1) AAS
進んでますか?
20
(1): 2014/10/05(日)18:48 ID:BAUn6XcwD(1/2) AAS
色々やったけどLINQで実装してるよ。
今はプロファイルなどのデバッグ情報埋め込むところの実装。
21: 2014/10/05(日)18:50 ID:BAUn6XcwD(2/2) AAS
LINQでやるとVisual Studioの支援受けられるし.NETのクラス全部使えるし。
データ型を限定した1さんの実装よりパフォーマンスは悪いけど汎用性は凄くある。
22: 2015/06/12(金)15:11 ID:JTH(1) AAS
やっと昨日から復活したよん
電力自由化やってましたわ
orderbyちょろっと実装
インデックスにはまだ悩んでる
パトリシアツリーもちょっとやってみたけど
うまく整合するか不明
23: 2015/06/15(月)12:03 ID:WIq(1) AAS
1です。
やっとパトリシアツリーで実装出来そうな感じになってきました。
パトリシアツリーというのはTrieの一種で文字列を高速に
インデックス化します。しかも文字列圧縮できるので
極めて便利ですわ。
実際のDBとの組み合わせには配列として実装するとか
プログラム中ではTerminatedで記載されている終端ノード
の判別を無くすとかありますが頭のなかでは解決したっぽいです。

今回実装しようとするのはIoT向けに小さくて早いDBを作りたいと
思ったのがきっかけなので>>20さんのようにLINQとか
省5
24: 2015/06/19(金)12:42 ID:BTQ(1) AAS
パトリシアツリー使ったインデックスができました。
他のパトリシアツリーの実装と異なり、
設定時の入力順も保持しています。
よってこれをカラムに適用すれば
常にソート順、入力順が両方取得できます。
一部同一値とか未実装のものもありますがこれと最初の簡単DB実装と合わせれば
概ねデータベースとして機能します。
terminateの配列はbooleanとしてしか使ってないのでここに値を入れて
key-valueも可能
SQLとしてはgroupbyとかbetweenとか全文検索あたりはこれで出来るはずなので
省3
25: 2015/06/23(火)19:42 ID:M45(1) AAS
1です。一応動きました!
SQLをパースするのは基本がしっかりしてからですね
まだ不安定ですので、土台がためです。
jusyo.jp/csv/document.html
とりあえず上のzenkoku.csvの22カラム14万行のデータを入れてみました。

全カラムインデックスして8.94秒、1秒あたり3万項目をインデックス化できるようです
しかしメモリが思ったより食うんです
速度優先で余計なリンク張ってるからしょうがないけど
文字列の20MBのデータは8MBくらいまで圧縮されますが
それに関連するリンクが70MBくらいあります
省3
26: 2016/05/18(水)14:12 ID:ezI(1) AAS
1年くらい空いてしまったけど、やっと形になったので再開
インデックス化で本当に時間を使ってしまった
LOUDSというデータ構造について色々やってたです
出来た事は出来たけど、細かい問題が解決しきれなくて
最近動くモノを作ろうと思えて、作りなおしました
27: 2016/05/19(木)14:27 ID:Dmy(1) AAS
今まではボトムアップで作ってたのですが、テーブルからデータベース参照したり
マルチスレッドで動作するための仕組み等でひっかかってました
全体の構成はこんな感じです

カタログクラス
+データベースクラス
-+テーブルクラス
--+カラムクラス
--+データノードクラス

カタログクラスはsingletonにして、下位のクラスから使いまわせるようにします
singletonのカタログクラスからインスタンスを生成するので各クラスもシングルトンに
省3
28: 2016/05/20(金)09:13 ID:KWC(1) AAS
構文解析はデータベースクラスに設置しました
ただデータベースクラス自体に変更を加えるUSE DATABASEは別途実装です
またDROP DATABASE等は自データベースでできないようにするのと
_SYSTEMデータベースをディフォールトで作ります
このDBは本来統計情報とか入れるものですが今回は存在するだけです
29: 2016/05/26(木)11:33 ID:I0n(1) AAS
とりあえず動くファイルをアップしておきます。
外部リンク[zip]:neon.cx
msql.exeでコマンドラインからsqlを叩けます。
サンプルのデータベースも入ってるので
よかったら見てください。
30: 2016/06/06(月)16:04 ID:eCV(1) AAS
とりあえずまあ動くのだけど、
テーブルコピーしてるから重い
16万件でselectするとちょっと一息
ついてしまう。検索よりロードの方が早かったりするのは..
実体コピーしないのつくりますん
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.075s*