web-dev-qa-db-ja.com

Neo4jシャーディングの側面

私はNeo4jのスケーラビリティを調べていて、2013年1月にDavid Montagが書いたドキュメントを読んでいました。

シャーディングの側面については、2014年の最初のリリースで最初のソリューションが提供されると述べました。

誰かがそれが行われたかどうか、そうでない場合はそのステータスを知っていますか?

ありがとう!

25
Monta

開示:私はNeo4jオープンソースグラフデータベースのスポンサーであるNeo TechnologyのVP製品として働いています。

Neo4j 2.0(本日は実際に2.0.1)をリリースしたばかりですが、主に(さらに)パフォーマンスとスケーラビリティに重点を置いた2.1リリースに着手しています。これにより、グラフの上限が実質的に無制限のエンティティに増加し、その他のさまざまなものが改善されます。

最初にコンテキストを設定してから、質問に答えます。

おそらく紙から見たように、Neo4jの現在の水平スケーリングアーキテクチャは、読み取りスケーリングを可能にし、書き込みはすべてマスターになり、ファンアウトします。これにより、実質的に無制限の読み取りスケーリングが可能になり、1秒あたり数万の書き込みが可能になります。

実用的に言えば、ソーシャルグラフに約10億人の生産Neo4j顧客(Snap InteractiveやGlassdoorを含む)がいます...すべての場合において、アクティブで非常にヒットしているWebサイトの背後にあり、比較的穏やかなNeo4jクラスターによって処理されています(いいえ5つ以上のインスタンス)。つまり、これは1つの重要な機能です。今日のNeo4jは驚くほどの計算密度を備えているため、かなり小さい実稼働ワークロードを処理するかなり小さなクラスターが非常に高速な応答で定期的に見られます。

現在のアーキテクチャの詳細については、こちらをご覧ください: www.neotechnology.com/neo4j-scales-for-the-enterprise/ そして、顧客のリスト(Wal-MartやeBayなどの企業を含む)は、ここにあります: neotechnology.com/customers/ 世界最大の宅配業者の1つは、Neo4jを使用して、すべてのパッケージをリアルタイムでルーティングします。ピークは1秒あたり3000回のルーティング操作で、ダウンタイムはゼロです。 。 (これは間違いなく、グラフデータベースとNOSQLデータベースの世界最大かつ最もミッションクリティカルな使用法ですが、残念ながら私はそれを特定することはできません。)

したがって、ある意味でtl; drは、ウォルマートやeBayほど大きくなければ、おそらく大丈夫です。それはそれを少しだけ単純化します。トランザクション書き込みのワークロードを毎秒数十万回まで維持しているケースが1%あります。ただし、そのような場合でも、そのすべてのデータをリアルタイムグラフにロードすることは適切ではありません。私たちは通常、いくつかの集約またはフィルタリングを行い、より重要なものだけをグラフに取り込むように人々に助言します。 Intuitはこれについて良い話をしました。 10億のB2Bトランザクションをフィルタリングし、毎月のトランザクション関係の数をはるかに少なくします。

シャーディングに入る...シャーディングは最近多くの人気を得ています。これは主に、結合がアンチパターンであるNOSQLの他の3つのカテゴリのおかげです。ほとんどのクエリには、個別のデータの1つだけの読み取りまたは書き込みが含まれます。結合がキー値ストアとドキュメントデータベースのアンチパターンであるのと同様に、シャーディングはグラフデータベースのアンチパターンです。つまり、単一のインスタンスでメモリ内のすべてのデータを利用できる場合に、最高のパフォーマンスが得られます。これは、読み取りと書き込みを行うたびにネットワーク全体を行き来すると、速度が大幅に低下するためです。 、あなたがあなたのデータをどのように分配するかについて本当に本当に賢明でない限り...そしてそれでも。私たちのアプローチは2つあります。

  1. シャーディングに頼ることなく、非常に大量の読み取りおよび書き込みボリュームをサポートするために、可能な限り多くの賢いことを行います。これにより、最高で最も予測可能なレイテンシと効率が得られます。言い換えれば、シャーディングなしで要件をサポートするのに十分である場合、常にが最善のアプローチになります。上記のリンクは、ディスク上でデータをシャーディングすることなくメモリ内のデータをシャーディングできるデプロイメントパターン(キャッシュシャーディングと呼ばれるトリック)を含む、これらのトリックのいくつかについて説明しています。同様のラインに沿って他のトリックがあり、さらにパイクを降りてきます...

  2. doesがシャーディングをサポートするセカンダリアーキテクチャパターンをNeo4jに追加します。シャーディングを避けた方がよいのはなぜですか?より多くの人々がグラフのより多くの用途を見つけ、データ量が増え続けているので、最終的にそれは重要で避けられないことになると思います。これにより、たとえばFacebookのすべてを1つのNeo4jクラスター(かなり巨大なクラスター)で実行できるようになります。今日処理できるグラフのソーシャル部分だけではありません。これについてはすでに多くの作業を行っており、多くの考慮事項のバランスが取れていると考えられるアーキテクチャが開発されています。これは数年に及ぶ取り組みであり、単純にシャードするNeo4jのバージョンを非常に簡単にリリースすることはできましたが(おそらく本当に人気があります)、おそらくそれはしません。私たちはそれを正しく実行したいと考えています。これはロケット科学に相当します。

63
Philip Rathle

TL; DR2018年は数日先ですneo4jは、通常考慮されるshardingをまだサポートしていません。

詳細Neo4jでは、すべてのデータが単一のノードに収まる必要があります。ノードの内容はクラスター内で複製できますが、実際のシャーディングは全体像の一部ではありません。

Neo4jがシャーディングについて話すとき、それらはメモリ内のデータベースのキャッシング部分を参照しています。異なるスライスが異なる複製ノードにキャッシュされます。これは、各ノードに合計データの一部しか含まれていないmysqlシャーディングとは異なります。

以下は、スケーラビリティに関する「テイク」の要約です。彼らの製品用語は「高可用性」です https://neo4j.com/blog/neo4j-scalability-infographic/

enter image description here

。ご了承ください High Availabilitynotと同じである必要があります(-===-)Scalability:と同じであるため、従来の用語の理解では後者は実際にはサポートされません。

22
javadba