私は最近、グラフ データベースの世界に触れてきました。私のような年老いた関係犬にとって、これは非常に興味深いパラダイムシフトです。
また、ごく最近、私は liquibase をいじっていましたが、データベースを管理するための非常に優れたツールでした。
つまり、2 つの世界がぶつかり合うので、グラフ データベースの liquibase のような変更管理を行うツールが世の中にあるのではないかと思っていました。特に と に興味がneo4j
ありorientdb
ます。
私は最近、グラフ データベースの世界に触れてきました。私のような年老いた関係犬にとって、これは非常に興味深いパラダイムシフトです。
また、ごく最近、私は liquibase をいじっていましたが、データベースを管理するための非常に優れたツールでした。
つまり、2 つの世界がぶつかり合うので、グラフ データベースの liquibase のような変更管理を行うツールが世の中にあるのではないかと思っていました。特に と に興味がneo4j
ありorientdb
ます。
Liquigraphは現在存在し、まだかなり新しいものですが、作者はフィードバックを非常に受け入れ、プロジェクトに積極的に取り組んでいます。
Pramod Sadalage と Martin Fowler の 2003 年のEvolutionary Database Designに関する影響力のある記事は、データベースのスキーマ変更を管理する方法に大きな影響を与えました。Java および .NET エコシステムでDbDeployおよび DbDeploy.netを使用し続け、現在はActiveRecord migrationsを使用しています。liquibase に興味がある場合は、これらのツールを検討することをお勧めします。
Neo4j.rbのドキュメントでは、Neo4j に対するこの種の移行について説明しています。
個人的には、Neo4j で移行を管理するツールを使用したことはありませんが、プロパティの名前変更、エッジ ラベルの変更、インデックスの作成などを実行する移行スクリプトを作成しました。ユースケースの例として、Neo4j グラフに保存されているいくつかの外部キーを再マップし、インデックスを更新するために使用した Gremlin Groovy スクリプトのスニペットを次に示します。
try {
projects.each { node ->
old_id = node.ref_id
new_id = old_to_new_ids[old_id]
index.remove('project', old_id, node)
node.ref_id = new_id
index.put('project', new_id, node)
}
} catch (Throwable e) {
println(e)
} finally {
g.shutdown()
}
Neo4j バージョン 1.8 の時点で、グラフ メタデータに使用できる PropertyContainer があります。このコンテナを使用して「schema_version」プロパティを更新するのは簡単です。コードは次のようになります。
EmbeddedGraphDatabase db = new EmbeddedGraphDatabase(dbFilename);
Transaction tx = db.beginTx();
PropertyContainer properties = db.getNodeManager().getGraphProperties();
properties.setProperty("schema_version", 3);
tx.success();
tx.finish();
Objectivity/DB は、「Schema Evolution」という機能を備えたオブジェクト指向/グラフ データベースです。この機能を使用すると、スキーマの作成、データのロード、スキーマの変更、さらにデータのロードを行うことができます。スキーマは何度でも変更できます。運用システムをデプロイし、データをリロードすることなく何百回もスキーマを変更したお客様がいます。
Schema Evolution 機能は、各形状がスキーマ カタログに格納され、各オブジェクトが形状 ID を持つスキーマ「形状」の概念を使用します。オブジェクトがディスクから読み取られるとき、シェイプ ID を使用してカタログからスキーマ シェイプを検索します。次に、カタログ形状がそのスキーマ タイプの「最新」の形状でない場合、実際のオブジェクト データはそのオブジェクト タイプの最新の形状に一致するようにその場で「展開」されます。これにより、誰かが追加の属性を必要とするという理由だけで、運用システムがペタバイト規模のデータベースをリロードする必要がなくなります。
許可されているスキーマ変更には、属性の追加、削除、再入力など、さまざまな種類がありますが、データやスキーマを機能的に破壊するために許可されていないスキーマ変更がいくつかあります。
免責事項: 私は Objectivity, Inc. に勤務しています。