2012-07-14 144 views
1

可能有人点我发布/ PDF/explan在这里,我可以更多地了解Hypertable的数据库设计,我已经找遍了谷歌,但没有什么可出现Hypertable的数据库设计

主要的问题我已经是我该怎么办存储您“不能”表示为关键值的数据。例如,假设我想跟踪用户评论,我可以简单地模仿关系数据库,生成新的审查密钥存储我需要的所有数据,然后为产品X存储密钥以json格式存储所有评论到x.reviews

我想出的另一件事是简单地有x.reviewKeys,然后对于每个生成的评论推新密钥作为该单元格的新版本,假设我可以存储无限数量的同一单元格版本。因为我离开数据库的一切我都在代码执行工作

第二条本办法似乎更适合我。

有谁知道如何来处理这个问题,甚至更好的谷歌是如何处理这与他们的BigTable中

回答

1

此寻找任何可能导致理解Hypertable的数据库设计的“几个小时”肯定是不够的,但这里是开始点,如果有人跑到这个谷歌

现在据我了解,到目前为止,您可以定义列家庭说,reviews,并且每个列家庭可以有无限数量的键,例如,如果你尝试存储用户数据,你可能会写这样的东西

userKey:info并且有多个属性,如,name, address, email ...你将能够通过简单地定义键,该条目访问信息,以便例如让用户address你会使用userKey:info:address关键

一件事,使列族不同(如果我理解得很好)是你可以得到所有在列族键,以便例如,如果指定userKey:info你会得到userKey:info:name, userKey:info:address, userKey:info:email的结果,这意味着存储所有我在我的问题,你会提到的评论创建新的专栏家庭和存储所有评论的关键,你会最终得到像这样的key:reviews:<review_ID>这将返回所有评论的ID(如果你问它返回键:评论),并且你会简单地使用该ID获取有关具体审查的详细信息。

所以基本上就像你有属性的名称,地址,电子邮件列家庭信息,在这里你可以使用审核ID作为列属性。

现在至少部分确定我得到了正确我还检查了riak数据库设计(键/值数据库不像hypertable,它是列数据库?),似乎他们有桶作为列家族的替代品,所以这个以免似乎是正确的实施

我不知道他们是如何实现这个内部使其效率,所以我必须检查出来,因为我总是创建新帐户所以我不能更新这篇文章,但如果有人有更多的信息后重放/编辑这个职位

0

所以,如果我理解正确的话,你有产品表和另一个评价,他们有一个1:N的关系(有能成为一个每个产品的评论)?要做到这一点

一种方法是使用列预选赛。

您的产品表中有一个行键(即产品ID),一些列的标题,描述,制造商等一列“评论”:

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

对于您可以创建一个独特的密钥的评论,即GUID的行键(或者是一个足以大的随机数,或只是一个独特的时间戳;我要去使用GUID我我的例子):

create table Reviews (author, rating, text); 

要创建1:N的关系,插入审查的行键进入“评论”栏家庭作为限定符(实际单元格值不需要,可以为空):

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

并检索产品123的所有评论:

SELECT reviews FROM Products WHERE ROW = "123"; 

你甚至可以创建在“评论”一个限定词索引来加速一些疑问。

+0

这个例子不完整,你插入什么产品?你如何指定每个表上的键? – lurscher 2012-12-24 15:46:25