4

Project Voldermortを使用して、従来のRDBMSクエリの結果をキャッシュしていることがわかります。ただし、この場合、EHcache Jcacheなどの他の(Java)キャッシングシステムに比べて大きな利点はほとんどありません。

Project Voldermortまたは同様のKeyValueストアを他にどこで使用できますか?これをビジネスアプリケーションでどのように使用していますか?

4

2 に答える 2

4

データベースの速度を向上させるための1つのアプローチは、非正規化することです。このMySQLの例を見てください:

CREATE TABLE `users` (
    `user_id` INT NOT NULL AUTO_INCREMENT,
    … -- Additional user data
    PRIMARY KEY (`user_id`)
);


CREATE TABLE `roles` (
    `role_id` INT NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(64),
    PRIMARY KEY (`role_id`)
);


CREATE TABLE `users_roles` (
    `user_id` INT NOT NULL,
    `role_id` INT NOT NULL,
    PRIMARY KEY (`user_id`, `role_id`)
);

きちんとした、整頓された、正規化された。ただし、ユーザーとそのロールを取得する場合、クエリは複雑です。

SELECT u.*, r.*
  FROM `users` u
  LEFT JOIN `user_roles` ur ON u.`user_id` = ur.`user_id`
  JOIN `roles` r ON ur.`role_id` = r.`role_id`;

これを非正規化すると、次のようになります。

CREATE TABLE `users` (
    `user_id` INT NOT NULL AUTO_INCREMENT,
    `role` VARCHAR(64),
    … -- Additional user data
    PRIMARY KEY (`user_id`)
);

そして、同等のクエリは次のようになります。

SELECT * FROM `users`;

これにより、クエリのパフォーマンス特性の一部が改善されます。

  1. 必要な結果はすでにテーブルにあるため、読み取り側の計算を実行する必要はありません。たとえば、特定の役割を持つユーザーの数を確認したい場合は、とが必要にGROUP BYなりCOUNTます。非正規化されている場合は、ロールの保持とそのロールを持つユーザーの数に特化した別のテーブルに保存します。
  2. 必要なデータは同じ場所にあり、できればディスク上の同じ場所にあります。多くのランダムシークを必要とするのではなく、1〜数回の順次読み取りを実行できます。

NoSQL DBは、ほとんど静的なシーケンシャルデータセットにアクセスする必要があるこれらのケース向けに高度に最適化されています。その時点では、ディスクからネットワークにバイトを移動しているだけです。作業が減り、オーバーヘッドが減り、スピードが上がります。これは単純に聞こえますが、データとアプリケーションをモデル化して自然に感じるようにすることができます。

このパフォーマンスのトレードオフは、書き込みの負荷、ディスクスペース、およびアプリの複雑さです。データを非正規化すると、コピー数が増えます。つまり、ディスク容量と書き込み負荷が増えます。基本的に、クエリごとに1つのデータセットがあります。これらの計算の負担を読み取り時間ではなく書き込み時間にシフトするため、これを行うには実際に何らかの非同期メカニズムが必要であり、アプリが複雑になります。

また、より多くのコピーを保存する必要があるため、より多くの書き込みを実行する必要があります。これが、SQLデータベースを使用してこの種のアーキテクチャを実際に複製できない理由です。書き込みをスケーリングすることは非常に困難です。

私の経験では、大規模なアプリケーションにとってはトレードオフの価値が十分にあります。カサンドラの実用的なアプリケーションについてもう少し読みたい場合は、私が数か月前にこの記事を書いたので、役立つかもしれません。

于 2009-12-30T07:23:31.577 に答える
2

Project Voldermortは、NoSQLムーブメントの一部です。コンピュータアーキテクチャのトレンドは、水平方向のスケーラビリティを必要とする方向にデータベースを押し付けています。NOSQLはこの要件に対処しようとします。

このようなKey/Valueストアの主張されている利点の中には、従来のRDBMSのオーバーヘッドなしに膨大な量のデータを吹き飛ばす機能があります。

http://www.computerworld.com/s/article/9135086/No_to_SQL_Anti_database_movement_gains_steam_

于 2009-10-20T15:56:52.920 に答える