私はさまざまな種類のNoSQLデータベースの種類を調査しており、Bigtable、HBase、Cassandraなどの列ファミリーストアのデータモデルに頭を悩ませようとしています。
最初のモデル
一部の人々は、列ファミリーを行のコレクションとして説明します。各行には列[ 1 ]、[ 2 ]が含まれます。このモデルの例(列ファミリーは大文字です):
{
"USER":
{
"codinghorror": { "name": "Jeff", "blog": "http://codinghorror.com/" },
"jonskeet": { "name": "Jon Skeet", "email": "jskeet@site.com" }
},
"BOOKMARK":
{
"codinghorror":
{
"http://codinghorror.com/": "My awesome blog",
"http://unicorns.com/": "Weaponized ponies"
},
"jonskeet":
{
"http://msmvps.com/blogs/jon_skeet/": "Coding Blog",
"http://manning.com/skeet2/": "C# in Depth, Second Edition"
}
}
}
2番目のモデル
他のサイトでは、列ファミリーを行内の関連する列のグループとして説明しています [ 3 ]、[ 4 ]。この方法でモデル化された前の例のデータ:
{
"codinghorror":
{
"USER": { "name": "Jeff", "blog": "http://codinghorror.com/" },
"BOOKMARK":
{
"http://codinghorror.com/": "My awesome blog",
"http://unicorns.com/": "Weaponized ponies"
}
},
"jonskeet":
{
"USER": { "name": "Jon Skeet", "email": "jskeet@site.com" },
"BOOKMARK":
{
"http://msmvps.com/blogs/jon_skeet/": "Coding Blog",
"http://manning.com/skeet2/": "C# in Depth, Second Edition"
}
}
}
最初のモデルの背後にある考えられる理論的根拠は、すべての列ファミリーがのような関係を持っているわけではないというUSER
ことBOOKMARK
です。これは、すべての列ファミリーに同一のキーが含まれているわけではないことを意味します。カラムファミリーを外側のレベルに配置することは、この観点からより自然に感じます。
「列ファミリー」という名前は、列のグループを意味します。これはまさに、 2番目のモデルで列ファミリーが表示される方法です。
どちらのモデルもデータの有効な表現です。私は、これらの表現が人間に向けてデータを伝達するためだけのものであることを理解しています。アプリケーションは、そのような方法でデータを「考え」ません。
質問
列ファミリーの「標準」定義とは何ですか?それは行のコレクションですか、それとも行内の関連する列のグループですか?
私はこのテーマについて論文を書かなければならないので、人々が通常「コラムファミリー」の概念を他の人々にどのように説明するかにも興味があります。これらのモデルは両方とも互いに矛盾しているようです。コラムファミリーストアを説明するために、「正しい」または一般的に受け入れられているモデルを使用したいと思います。
アップデート
私の論文でデータモデルを説明するために、2番目のモデルに落ち着きました。コラムファミリーストアのデータモデルを他の人にどのように説明するかについては、まだ興味があります。