1

誰かがハイパーテーブルデータベースの設計についてもっと学ぶことができるpost/pdf/explanをここに教えてもらえますか.Google全体を検索しましたが、何も役に立ちません

私が抱えている主な問題は、キー値として「表現できない」データをどのように保存するかです。たとえば、ユーザー レビューを追跡したいとします。単純にリレーショナル データベースを模倣し、新しいレビュー キーを生成して、必要なすべてのデータを保存します。製品 X の場合、すべてのレビューのキーを json 形式で x.reviews に保存します。

私が思いついたもう1つのことは、単純にx.reviewKeysを持ち、生成されたレビューごとに、同じセルの無限のバージョンを保存できると仮定して、そのセルの新しいバージョンとして新しいキーをプッシュすることです。

コードで実装するすべての作業をデータベースに任せているので、2 番目のアプローチの方が適切に思えます。

誰かがこの問題を処理する方法を知っていますか、またはGoogleがビッグテーブルでこれをどのように処理するか

4

2 に答える 2

0

私の理解が正しければ、製品のテーブルとレビューのテーブルがあり、1:n の関係があります (製品ごとに複数のレビューがある可能性があります)。

これを行う 1 つの方法は、列修飾子を使用することです。

製品テーブルには、行キー (製品 ID)、タイトル、説明、メーカーなどのいくつかの列があります。そして、1 つの列「レビュー」があります。

create table Products (title, description, manufacturer, reviews);

レビューの場合、一意のキー、つまり行キーの GUID (または十分に大きな乱数または一意のタイムスタンプ。例では GUID を使用します) を作成できます。

create table Reviews (author, rating, text);

1:n の関係を作成するには、レビューの行キーを修飾子として「reviews」列ファミリーに挿入します (実際のセル値は必要なく、空でもかまいません)。

INSERT INTO Reviews VALUES ("product-id", "reviews:1273-1234-234-123a", "");

製品 123 のすべてのレビューを取得するには:

SELECT reviews FROM Products WHERE ROW = "123";

一部のクエリを高速化するために、「レビュー」に修飾子インデックスを作成することもできます。

于 2012-07-15T11:58:30.460 に答える
0

Hypertable データベースの設計を理解するために何かを検索するこの "数時間" では絶対に十分ではありませんが、Google で誰かがこれに遭遇した場合の出発点はここにあります。

これまでのところ、私が理解している限りでは、列ファミリーを定義できreviews、各列ファミリーは無限の数のキーを持つことができます。たとえば、ユーザーデータを保存しようとすると、おそらく次のように書くでしょう

userKey:info...のような複数のプロパティがあり、name, address, emailそのエントリにキーを定義するだけでその情報にアクセスできるため、たとえばキーとしてaddress使用するユーザーを取得できますuserKey:info:address

列ファミリーが異なる理由の 1 つは (私がよく理解している場合)、列ファミリーですべてのキーを取得できることです。たとえば、結果としてuserKey:info取得することを指定した場合userKey:info:name, userKey:info:address, userKey:info:email、質問で言及したすべてのレビューを保存する新しい列ファミリーを作成し、すべてのレビューにキーを保存すると、すべてのレビューのkey:reviews:<review_ID>ID (key:reviews を返すように要求した場合) を返すこのようなものになり、単純にその ID を使用して詳細を取得します。具体的なレビューについて。

基本的に、列ファミリー情報にプロパティ名、住所、電子メールがあるのと同じように、ここではレビュー ID を列プロパティとして使用します。

少なくとも部分的に正しいことを確認するために、riak データベースの設計 (列データベースであるハイパーテーブルとは異なり、キー/値データベース?) もチェックしましたが、列ファミリーの代わりにバケットがあるようです。正しい実装

効率的にするために彼らがこれをどのように内部的に実装したかはわかりませんので、チェックアウトする必要があります.SOで常に新しいアカウントを作成するので、この投稿を更新することはできませんが、誰かがより多くの情報を持っている場合は、リプレイを投稿してください/この投稿を編集

于 2012-07-14T13:51:55.337 に答える