3

数日前に cassandra データベース エンジンについて聞いたことがあり、それに関する優れたドキュメントを探しています。cassandra について勉強した後、cassandra は他のデータ エンジンよりもスケーラブルであることがわかりました。Amazon SimpleDB も読んでいますが、SimpleDB にはテーブルあたり 10GB の制限があり、Google Datastore は Amazon SimpleDB よりも遅いため、それら (Google Datastore、Amazon SimpleDB) を使用しないことを好みます。したがって、私たちのサイトを大規模なデータで特別に高い書き込み速度にスケーリングするために、データ エンジンとして Cassandra を使用するのが好きです。

しかし、cassandra を使い始める前に、「casssandra を使用して複雑なデータを処理する方法」について混乱しています。以下に MySQL データベースの構造を示します。これを読んで、良い提案をしてください。

ユーザー テーブル
hasColum ID プライマリ
hasColum 電子メール 一意
hasColum FirstName
hasColum LastName

カテゴリ テーブル
hasColum ID プライマリ
hasColum 親
hasColum カテゴリ

Posts テーブル
hasColum ID プライマリ
hasColum UID ユーザーにリンクされたインデックス外部キー -> ID
hasColum CID カテゴリにリンクされたインデックス外部キー -> ID
hasColum タイトル
hasColum 投稿インデックス
hasColum PunDate

コメント
hasColum ID プライマリ
hasColum UID ユーザーにリンクされたインデックス外部キー -> ID
hasColum PID ポストにリンクされたインデックス外部キー -> ID
hasColum コメント

ユーザー グループ
hasColum ID プライマリ
hasColum 名

UserToGroup テーブル (多対多の関係のみ)
hasColum UID 外部キーは Users->ID にリンクされています
hasColum GID 外部キーは Group->ID にリンクされています

最後に参考までに、SimpleCassie PHP クラスhttp://code.google.com/p/simpletools-php/を使用したい ので、SimpleCassie を使用した例を教えていただければ非常に役に立ちます。

4

5 に答える 5

5

負荷が高く、システムから大量のデータが送られてくると仮定します。また、リレーショナル データベースを試して負荷が高くなり、数百万行にヒットし、1 秒あたり 10,000 件以上のリクエストが発生したと仮定します。

これらの仮定の後、考え方を変える必要があることをお伝えします。たとえば、あなたの質問では、リレーショナル データベースについて考えるときに非常に重要なテーブル構造を書き留めました。しかし、列ストア (cassandra/hbase/etc など) ではそれほど重要ではなく、重要な要求の種類です。列ストアでは、いつでも新しいメタ データ (リクエストではなく応答で使用する追加の列) を新しい列にスローできるため、設計を変更する必要はありません。ただし、リレーショナル データベースでは、テーブルを変更するか、pk-fk 関係を持つ別のテーブルを取得する必要があります。

cassandra (またはその他の列データベース) を使用する場合は、すべての API を目の前に配置する必要があります。

例 :

API にある場合getAllUserPosts($userId)は、UserPosts ColumnFamily または Posts ColumnFamily のセカンダリ インデックス (バックグラウンドで同様のことを行います) を使用する必要があります。さらに、結果をどのようにソートする必要がありますか? はい、設計の重要なポイントでもあります。作成日で並べ替えたい場合は、キーに TimeUID を使用するか、サードパーティのメカニズムを使用して増加する uid を生成することをお勧めします。「最後の更新」でそれらをソートしたい場合は、セカンダリインデックスを配置することをお勧めします。

私の経験から言うと、API やデータから必要なものが非常に明確な場合、cassandra を使用して何かを開発するのは本当にクールですが、大きな機能を変更したい場合は、非常に大きな課題が待ち受けているので注意してください。 . また、cassandra を高速にする基礎となる「結果整合性」を理解していることを確認してください。トランザクションを機能させるには、何度もキーボードを叩かなければならないので (少なくとも私はそうしました)。そしてもちろん、どこかの時点で、cassandra にある膨大なデータに対して大量の操作を実行したいと思うでしょう。つまり、肉のクラウド コンピューティング、つまりクラウド コンピューティングの準備ができていることです。ハドゥープ。

PS: ここには cassandra に関する経験と知識が豊富な人がたくさんいると思います。Cassandra を本番環境で使用しているときに経験し、理解したことを共有したかっただけです。

于 2011-03-02T20:49:05.857 に答える
5

カサンドラのwikiデータモデルリファレンスから:

エンティティとリレーションシップをモデル化し、インデックスを追加して必要になったクエリをサポートするリレーショナル システムとは異なり、Cassandra では、サポートするクエリを事前に効率的に検討し、適切にモデル化する必要があります。自動的に提供されるインデックスがないため、tables:queries をリレーショナルに使用する場合よりも、クエリごとに 1 つの ColumnFamily にはるかに近くなります。それに応じて非正規化することを恐れないでください。

グーグル記事はこちら

お役に立てば幸いです。

于 2010-05-07T20:47:30.203 に答える
4

非正規化します。twissandra.com およびhttp://github.com/ercflo/twissandraのドキュメントを参照してください。

http://wiki.apache.org/cassandra/ArticlesAndPresentationsのその他の例

于 2010-04-21T14:55:09.600 に答える
2

Twissandra (Cassandra の Twitter クローン) に関する優れた記事では、データ アクセス要件に基づくスキーマ設計について説明しています。役に立つかもしれませんhttp://www.rackspacecloud.com/blog/2010/05/12/cassandra-by-example/

于 2010-05-24T11:13:40.640 に答える
0

トラフィック量の点で本当にGoogleやAmazonと競争していますか?現在のMySQLインフラストラクチャのアップグレードを検討することから始めることをお勧めします-現在、クラスターで実行しているデータベースサーバーの数はいくつですか?データを分割しますか?

C。

于 2010-04-21T17:33:34.660 に答える