neo4jは組み込み型のグラフデータベースエンジンとのこと。
グラフ(ネットワーク)データベースではノードとリレーションでデータを表現していきます。リレーショナルデータベースと違って各ノードは自由なスキーマを持てるのと、検索するときはノードをたどって目的のノードを探すので、RDBMSと比べると自由度が高い反面、検索はごりごりロジックを組む必要があります。
というわけで、まずはノードを追加するコード。
// DBの保存先ディレクトリを指定してDBのインスタンスを生成 GraphDatabaseService graphDb = new EmbeddedGraphDatabase("db"); // トランザクションを開始 Transaction tx = graphDb.beginTx(); try { // ノードを作成 Node firstNode = graphDb.createNode(); firstNode.setProperty("name", "Naoki Takezoe"); firstNode.setProperty("mail", "takezoe@gmail.com"); // 処理が成功 tx.success(); } catch(Exception ex){ // 処理が失敗 tx.failure(); throw ex; } finally { // トランザクションを終了してDBをシャットダウン tx.finish(); graphDb.shutdown(); }
nao4jはトランザクションをサポートしており、beginTx()しておかないと検索も更新もできません。tx.success()でいわゆるコミット、tx.failure()でロールバックになるみたいです。
ちゃんとノードが追加されているかを確認するために、データベース内のノードを全部表示してみます。
// すべてのノードを表示 for(Node node: graphDb.getAllNodes()){ System.out.println("ID=" + node.getId()); for(String key: node.getPropertyKeys()){ System.out.println(key + "=" + node.getProperty(key)); } System.out.println("--"); }
すると以下のように出力されました。とりあえずちゃんと動いているっぽいです。
ID=0 -- ID=1 mail=takezoe@gmail.com name=Naoki Takezoe --
続きます。