Aerospikeが主張するほど優れているかどうかは誰にも言えますか?営利企業なので、私は少し懐疑的です。私の知る限り、彼らはオープンソース版をリリースしたばかりですが、彼らのウェブサイト上の主張はまだ誇張されている可能性があります。
AerospikeとMongoDBの比較に特に興味があります。
Aerospike、MongoDB、Redisを使用し、他の多くのNoSQLデータベースをテストしました。 Aerospikeの機能は非常に優れていますが、MongoDBとは異なります。すべては、データベースの使用を計画している対象によって異なります。さまざまなデータベースを使用している例を紹介できます。また、それらの違いを調べて、Aerospikeの利点について説明することもできます。
MongoDB
SQLの代替としてMongoDBを使用しています。私のMongoDBデータベースには、さまざまなフィールドがあります。多くの場合、フィールドが変更され、さまざまなフィールドでランダムにクエリを実行する必要があります。これは非常に構造化されていないデータベースであり、MongoDBは驚くべきものです。また、MongoDBを標準のキーと値のストアとして使用しました。それはうまく機能しますが、MongoDBにトランザクションスケールとデータベースサイズスケールの両方で準最適なパフォーマンスを発揮させました。確かに、データベースはもう少し最適化されているかもしれませんが、さまざまな状況でMongoDBを正しく構成するためのドキュメントを見つけるのは非常に難しいと思います。
Redis
Redisは純粋なキーと値のストアです。 Redisの最大の問題は、純粋にメモリ内にあることです(バックアップとしてディスクを使用しますが、使用可能なメモリより多くの情報を保存することはできません)。使用目的が非常に高速です。私は個人的に小さなトランザクションデータベースに使用します。特定のユーザーに対してイベントが発生した回数をカウントするなど、キーに対して非常に単純な機能を実行します。また、異なる値にマップする必要があるメモリ内のクイック検索も行います。 Redisは小さなデータセットに最適なツールであり、非常に高速です。構成も非常に簡単です。
エアロスパイク
私は個人的にAerospikeを使用して、Rescaleの代わりにスケーリングを行います。私の理解から、それはより多くのために使用することができます。 Redisと同様に、Aerospikeはキーバリューストアです。オープンソース版は、Redisがサポートしていないセカンダリインデックスもサポートしていると思います(本番環境ではセカンダリインデックスを使用していませんが、ほとんどテストしていません)。
Aerospikeの最大の特徴は、拡張性です。 Aerospikeを検討する際に解決しなければならなかった最大の問題は、非常に高速でありながら大規模なデータセットを処理するためにシステムをスケーリングすることでした。 Aerospikeを使用するプロジェクトには、速度に関する非常に厳しい要件があります。私は通常3〜4個のデータベース検索とその他の処理を行い、トランザクション時間は50ミリ秒未満である必要があります。いくつかの検索は、300GB以上のデータセットに対して行われます。このデータを保持し、妥当な時間内にアクセス可能にするソリューションを見つけることができませんでした。 300GB以上のRAMを搭載したマシンがなければ、Redisは明らかに動作しません。 MongoDBは、300GBをはるかに下回るサイズで非常にパフォーマンスが低下し始めました。そこで、Aerospikeを試してみたところ、すべてをうまく処理することができました。 Aerospikeの最大の利点は、データセットが大きくなったので、必要なときに新しいボックスを立ち上げる以上のことをする必要がなくなったことです。速度は一定のままです。
Aerospikesのドキュメントも非常に優れていると思います。構成するのはそれほど難しくなく、発生する問題の答えを見つけるのは非常に簡単です。
結論
それで、Aerospikeは彼らが主張するほど良いのでしょうか?個人的に、私は主張されたもの以外に何も見ませんでした。 100万TPSに拡張する必要はありませんでしたが、十分なハードウェアがあれば可能だと思います。 AerospikeとMongoDBの速度の差を示す数値も信じています。 Aerospikeは、MongoDBよりもはるかに「構成された」「計画された」データベースです。このため、AerospikeはMongoDBよりも規模がはるかに高速になります。動的に変更できるMongoDBとは異なり、単一の(またはセカンダリインデックスの場合は数百の)インデックスのみを心配する必要があります。本当に尋ねる必要がある質問は、データベースで何を達成しようとしているのかです。次に、どのデータベースがニーズに最も適合するかを調べます。スケーラブルで高速なキーバリューストアデータベースが必要な場合は、おそらくAerospikeが最適です。
特定の質問がある場合、または明確にする必要がある場合はお知らせください。私はおそらくあなたを助けることができるでしょう。
速度
Aerospikeは高速です。ほとんどのシステムは、低負荷またはシンプルなデータアクセスで迅速に動作しますが、AerospikeはインメモリおよびSSDベースのストレージオプションを最適化することにより、常に高速を維持しています。 Mongoは、キャッシュ用にRAMをたくさん使用すると高速ですが、それ以外の場合は低速で、書き込みパフォーマンスが低下します。
信頼性
Aerospikeは非常に安定していますが、データアクセスは簡単です。 MongoDBはこれまで、データの永続化とフェールオーバーに関して問題を抱えてきましたが、現在でははるかに改善されています。 Aerospikeのパフォーマンスが向上し、管理が容易になるため、スケーリング時の潜在的な問題が少なくなります。
セットアップ/構成
Aerospikeを使用したクラスタリングは、すべてのノードが同じであり、クライアントドライバーが接続とフェイルオーバーを自動的に処理するため、セットアップがはるかに簡単です。 MongoDBは、より多くのプラットフォームでネイティブに実行されるため、単一のサーバーをセットアップする方が簡単であり、構成なしで起動できます。
MongoDBには、クラスタリングの2つの主要な方法、レプリカセット(可用性)とシャーディング(スケーラビリティ)があります。 5つのシャードがあり、各シャードには3つのサーバーのレプリカセットがありました。つまり、データを保持する15台のサーバーです。その後、クラスター構成を維持する3つの構成サーバーがあり、最初の主要な停止後にスレーブをマスターに適切にエスカレーションするために2つのアービタープロセスを追加する必要がありました。それは多くの感動的な部分であり、将来レイアウトを変更することを非常に難しくします。
対照的に、Aerospikeの方がはるかに少ない労力で済みますが、より多くの設定が必要です。MongoDBではいつでもデータベースを作成および変更できますが、クラスターの起動後はほとんど変更できません。
Aerospikeには複数のクラスターを同期する機能があり(セットアップは複雑です)、異なるアクティブデータセンターでデータをレプリケートし、書き込みを受け入れることができます。これは、MongoDBではまったくサポートされていません。
データアクセス
MongoDBには、各ドキュメントが単なるjsonであるデータベース/コレクション/ドキュメントがあります。 Aerospikeには名前空間/セット/レコードがあり、各レコードはキーと値の「ビン」のコレクションであり、ネストされたキーと値の構造を持つことができます。名前空間は事前に構成されており、動的ではありません。また、プロパティの名前は14文字に制限されており、使用するのが面倒です。
どちらにもセカンダリインデックスがありますが、MongoDBを使用すると、Aerospikeでインデックスのセットアップまたはカスタムスクリプトが必要なときに、すぐにクエリを実行できます。どちらも組み込みの集約フレームワークを備えています。 AerospikeクライアントはLUAスクリプトをサポートしていますが、MongoDBはmap-reduceおよびカスタムjavascript関数をサポートしています。
それは実際にアプリケーションが必要とするものに依存しますが、MongoDBは柔軟性、クエリの容易さ、制限の緩和で勝ちます。
コスト
どちらもオープンソースであり、無料です。どちらにも追加機能を備えたエンタープライズバージョンがありますが、大量のデータがある場合、ライセンスは高価です。 Aerospikeは、同じパフォーマンスのために必要なマシンが少ないため、より安価になる可能性があります。
全体
ほとんどのシナリオでは、Aerospikeをお勧めします。 MongoDBのドキュメントストアのセマンティクスと柔軟性は優れていますが、分散データベースとしてスケーリングおよび維持するのは苦痛です。 Aerospikeは高速で信頼性が高く、より簡単にスケーリングできるノードを少なくして実行できます。
2014年10月:Aerospikeは、エンタープライズバージョンへの無料アクセスを得るために、資格のあるスタートアップ向けの特別プログラムを提供するようになりました。
2016年1月:MongoDBがリリースしました MongoDB Cloud Manager これは有料のSaaSサービスこれにより、Mongoの構成に関する多くの問題が解決されます。
2017年3月:両方のデータベースは長い道のりを歩んできました。 Aerospikeでは、クラスター全体を再起動することなく、レプリケーションが高速になり、構成設定がより柔軟になりました。 MongoDBには、新しいスキーマの適用、パフォーマンスの向上があり、 MongoDB Atlas マネージドサービスと共に結合をサポートして、すべてのスケーリングの問題を取り除きます。
今、強くお勧めします ScyllaDB Cassandra驚異的なパフォーマンス、マルチデータセンターレプリケーション、および使用制限
実稼働システムでMongoDB(2.4)とAerospike 3を使用しました。これらは私たちのチームが見つけた数少ない観察です:-
1)Aerospikeによる読み取り/書き込みスループットは無敵です。通常、読み取り要求が高い側にある場合、Mongo dbは特定の規模まで機能します。 95/5%の比率で同時読み取り/書き込みが必要な場合、Mongoは何でも劣化します。 Aerospikeでは、この比率が90/10であっても、ほとんど影響がありません。 AWSでは、Aerospikeを使用して20万TPSを達成しました。
2)Aerospikeのレイテンシは非常に低いです。読み取り遅延は、サーバー側で99パーセンタイルのサブミリ秒でした。書き込みレイテンシは、80パーセンタイルではサブミリ秒で、100パーセンタイルでは8ミリ秒以内でした。 最良のことは、異なるPOCでほぼ同じ数を得たため、一貫したパフォーマンスが得られたことです。
3)Aerospikeクラスターでは、他のソリューションと比較して、ごく少数のノードで十分です。また、SSDベースのデータストアは非常に印象的な数を提供するため、非常に費用対効果が高く、メンテナンスのオーバーヘッドがほとんどありません。
4)Aerospikeはオープンソースであるため、より幅広いコミュニティのサポートを期待しています:-)
そのため、すべての新しいシステムにAerospikeを使用し、MongoDBからの移行を試みています。