Neo4j 4.3 ハイライトまとめ
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
はじめに
この記事では、先日発表されたNeo4j 4.3のHighlightsに関して紹介します。
操作性
サーバーサイドルーティング機能の向上
サーバーサイドルーティングが、より多くのユースケースをカバーできるように拡張されました。クライアントはクラスタのDBMSに接続すると、トランザクションの種類(read-only vs read-write)とインスタンスの種類によって、クエリを自動的に実行またはリダイレクトします。トランザクションのリダイレクションはクライアントとサーバーのどちらでも管理することができます。
Causal Clusterに対しクエリを実行したとき、それを実行できないメンバーにルーティングされることがありましたが、サーバーサイドルーティングを有効にすることにより、そのようなクエリを内部で再ルーティングすることができるようになりました。
新規動的設定
以下の設定が動的に変更できるようになりました。
- dbms.lock.acquisition.timeout
- dbms.transaction.bookmark_ready_timeout
- dbms.security.ldap.authentication.attribute
- dbms.security.ldap.authorization.user_search_filter
- dbms.security.ldap.authorization.user_search_base
- dbms.security.ldap.authentication.user_dn_template
- dbms.security.ldap.authorization.group_membership_attributes
expandコマンドのパーミッション変更
neo4j.conf内において、dbms.max_databases=$(expr 10 * 10)
のようにカスタムスクリプトを使用するにはneo4j start --expand-commands
という形で、--expand-commandsオプションを付けることで実現できます。その際、neo4j.confファイルの権限に制限がありましたが、今回の変更で、より緩い権限でも利用できるようになりました。
- 今まで
- Neo4jプロセスを実行しているユーザーがOwnerであることが必要
- Neo4jプロセスを実行しているユーザーのみが読み込みと書き込み権限を保有
- 今後
- Ownerのみ書き込み権限を保有
- OwnerとGroupが読み込み権限を保有
- OwnerかGroupに属するユーザーで実行可能
causal clusterにおけるユニークID
causal clusterのメンバーはユニークIDを持つようになりました。以前のバージョンでは、それぞれのURIによって判別されていました。
neo4j-admin unbindによるクラスタのステートのアーカイブ
neo4j-admin unbindを使ってclusterからインスタンスを削除した際、事後分析と問題解決のためにクラスタのステートを保存できるようになりました。保存先は--archive-pathフラグで設定することができます。
シードストアを使用したCREATE DATABASE
neo4j-admin restore コマンドを使用してクラスタ内の 1 つのコアメンバーにデータベースのバックアップを転送し、そのメンバーをシードとして使用し、他のクラスタメンバーにデータベースを作成することができるようになりました。
ユーザーとロールのリネーム
再作成をせずにユーザーとロールをリネームできるようになりました。
SHOW FUNCTIONSとSHOW PROCEDURES
SHOWコマンドにより、DBMS上で有効なfunctionとprocedureを表示できるようになりました。
FULLTEXT INDEXのCREATEとDROP
CREATE INDEXとDROP INDEXコマンドを使い、full-text indexを作成できるようになりました。
Loggingの向上
query, security, generalログがカスタマイズできるようになりました。ログは構造化(JSON)と非構造化フォーマットを持ち、必要に応じて長さによる制限と難読化を設定できます。クエリ解析の向上のため、Query plansとtransaction IDがqueryログに追加できるようになりました。
バックアップとリストア
増分バックアップ、延期とパラレルリカバリー操作の機能が拡張されました。
ライセンスディレクトリ
Neo4jのホームディレクトリ配下に、ライセンスファイルを保存するための新しい標準ディレクトリが追加されました。neo4j.confファイルでのデフォルト設定は、「${NEO4J_HOME}/licenses」です。
スケーラビリティとフェデレーション
密度の高いノードの作成/削除のリレーションシップチェーンロック
リレーションシップ向けのロックメカニズムが向上しました。リレーションシップチェーンの新しいコンセプトで、これによりリレーションシップストアに保存されているノードのスタートとエンドに直接結びつけられることがなくなりました。
リードレプリカのみのクラスタ
クラスタリングの機能を拡張し、読み取り専用のレプリカインスタンスでクラスタを構成できるようになりました。読み取り専用のレプリカインスタンス用のデータは、読み取り/書き込みモードで使用されている単一のインスタンスから複製することができます。
パフォーマンス
ノードラベルとリレーションシップタイプのインデックス
リレーションシップに対するインデックスが新たに追加されました。(既存のノードに対するインデックスに近い)他のインデックスと同じようにINDEXコマンドを使い、ノードラベルとリレーションシップに対するインデックスを作成することができます。 実用的には、これらのインデックスは必要なければ削除することができ、ノードやリレーションシップ作成時に再構築が発生しても、処理はバックグラウンドで実行されるため、作成時間に影響は与えません。また、SHOW INDEXを使って確認することができます。
リレーションシップのプロパティに対するインデックス
ノードのプロパティに対するインデックスと同じように、リレーションシップのプロパティに対してインデックスを設定できるようになりました。
Cypher Plannerの改善
ORDER BYとLIMITが使えるようになりました。
isEmpty built-in function
与えられたデータ型を持つオブジェクトの空虚性をテストするために、isEmpty()ファンクションが追加されました。
開発/言語
exists()とIS NOT NULL機能
IS NOT NULLは、オブジェクトがNULLかNULLでないかを判断するための推奨される方法です。exists()は、関数と混同される可能性があり、非推奨となりました。
変換関数
数値、文字列、ブーリアンを変換する新しい関数が組み込まれています。
toIntegerOrNull(), toFloatOrNull(), toBooleanOrNull(), toStringOrNull(), toIntegerList(), toFloatList(), toBooleanList(), toStringList() が前バージョンの既存の変換関数に追加されています。
セキュリティ
ユーザーごとのホームデータベース
Linuxユーザーにとってのホームディレクトリのように、Neo4jに接続するときの特定のユーザーに対するデータベースが指定できるようになりました。例えば、ユーザー1はデフォルトでmovieデータベースに、ユーザー2はデフォルトでactorデータベースに接続するというような設定が可能になりました。
LDAP:不注意の認可を防ぐ
「dbms.security.ldap.authorization.access_permitted_group」は特定のグループに対して、LDAP認証を設定します。
「dbms.security.ldap.authentication.attribute」と「dbms.security.ldap.authentication.search_for_attribute」が追加され、LDAPユーザーを検索する際にカスタム属性を使用できるようになりました。
まとめ
今回のリリースでは広範囲に及ぶ機能の追加や改善がありました。個人的に特に注目しているのはリレーションシップに対するIndex作成ができるようになったことで、ますますパフォーマンスが上がりそうな気がしています。この辺りは積極的に検証して、ブログ化していきたいです。