私はNeo4jのスケーラビリティを調べていて、2013年1月にDavid Montagが書いたドキュメントを読んでいました。
シャーディングの側面については、2014年の最初のリリースで最初のソリューションが提供されると述べました。
誰かがそれが行われたかどうか、そうでない場合はそのステータスを知っていますか?
ありがとう!
開示:私は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つあります。
シャーディングに頼ることなく、非常に大量の読み取りおよび書き込みボリュームをサポートするために、可能な限り多くの賢いことを行います。これにより、最高で最も予測可能なレイテンシと効率が得られます。言い換えれば、シャーディングなしで要件をサポートするのに十分である場合、常にが最善のアプローチになります。上記のリンクは、ディスク上でデータをシャーディングすることなくメモリ内のデータをシャーディングできるデプロイメントパターン(キャッシュシャーディングと呼ばれるトリック)を含む、これらのトリックのいくつかについて説明しています。同様のラインに沿って他のトリックがあり、さらにパイクを降りてきます...
doesがシャーディングをサポートするセカンダリアーキテクチャパターンをNeo4jに追加します。シャーディングを避けた方がよいのはなぜですか?より多くの人々がグラフのより多くの用途を見つけ、データ量が増え続けているので、最終的にそれは重要で避けられないことになると思います。これにより、たとえばFacebookのすべてを1つのNeo4jクラスター(かなり巨大なクラスター)で実行できるようになります。今日処理できるグラフのソーシャル部分だけではありません。これについてはすでに多くの作業を行っており、多くの考慮事項のバランスが取れていると考えられるアーキテクチャが開発されています。これは数年に及ぶ取り組みであり、単純にシャードするNeo4jのバージョンを非常に簡単にリリースすることはできましたが(おそらく本当に人気があります)、おそらくそれはしません。私たちはそれを正しく実行したいと考えています。これはロケット科学に相当します。
TL; DR2018年は数日先ですneo4j
は、通常考慮されるsharding
をまだサポートしていません。
詳細Neo4j
では、すべてのデータが単一のノードに収まる必要があります。ノードの内容はクラスター内で複製できますが、実際のシャーディングは全体像の一部ではありません。
Neo4jがシャーディングについて話すとき、それらはメモリ内のデータベースのキャッシング部分を参照しています。異なるスライスが異なる複製ノードにキャッシュされます。これは、各ノードに合計データの一部しか含まれていないmysqlシャーディングとは異なります。
以下は、スケーラビリティに関する「テイク」の要約です。彼らの製品用語は「高可用性」です https://neo4j.com/blog/neo4j-scalability-infographic/
。ご了承ください High Availability
はnotと同じである必要があります(-===-)Scalability
:と同じであるため、従来の用語の理解では後者は実際にはサポートされません。