7 ポイント 投稿者 xguru 2020-11-28 | 6件のコメント | WhatsAppで共有
  • SQLiteのGenerated ColumnsとJSON関連関数を使って、Document DBのように使う方法

  • GENERATED ALWAYSjson_extract を組み合わせる

広告

CREATE TABLE t ( body TEXT, d INT GENERATED ALWAYS AS (json_extract(body, '$.d')) VIRTUAL);

INSERT INTO t VALUES(json('{"d":"42"}'));

広告

SELECT * FROM t WHERE d = 42;

{"d":"42"}|42

6件のコメント

 
nicewook 2020-11-30

こういう使い方も可能でしょうか? RDBMS の利点を活かしつつ、マイナーなフィールドの追加や変更に対して NoSQL の拡張性も持てそうなのですが。

  1. まずは SQLite を使う。

  2. フィールドを追加する必要がある場合は、このようにドキュメントDBとして使う。

 
galadbran 2020-11-30

言及されている生成カラムと同一ではないかもしれませんが、PostgreSQL や MySQL でもすでに JSON 型カラムとその型に対するクエリが提供されているので、似たように使うことはできそうです。

 
xguru 2020-11-30

おっしゃる通り、カスタムのユーザーフィールド追加など、そういった用途に使えそうですね。

 
ffdd270 2020-11-29

うーん……ドキュメントDBの中に、SQLiteみたいに組み込み用途向けのDBってないんでしょうか? SQLiteは根っこがSQLなのでちょっと身構えてしまって OTL。MongoDB の Lite バージョン、MangoDB みたいなものとか……(…)

 
xguru 2020-11-30

単純なキー・バリュー用途なら RocksDB https://github.com/facebook/rocksdb

おっしゃる通り、ドキュメントDB用途なら UnQLite https://unqlite.org/

あたりが高速で使いやすいそうです。

 
ffdd270 2020-12-01

おお、ありがとうございます。これからはSQLiteだけじゃなくて、これらも一度ずつ使ってみないとですね。