有人可以指点我在这里发布/ pdf /说明,我可以在那里了解更多有关超级数据库设计的知识,我已经搜遍了谷歌但没有任何有用的信息出现
我遇到的主要问题是如何存储您“无法”表示为关键值的数据。例如,假设我想跟踪用户评论,我可能只是模仿关系数据库,生成新的评论密钥存储我需要的所有数据,然后用于产品X商店密钥以json格式的所有评论到x.reviews
我提出的另一件事就是拥有x.reviewKeys,然后为每个生成的评论推送新密钥作为该单元格的新版本,假设我可以存储同一单元格的无限数量的版本。
第二种方法对我来说似乎更合适,因为我将所有我将在代码中实现的工作留给数据库。
有没有人知道如何处理这个问题,甚至更好的是谷歌如何用他们的bigtable来处理这个问题
答案 0 :(得分:0)
搜索可能导致了解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数据库设计(键/值数据库不像hyperable这是列数据库?)并且看起来他们有桶作为列族的替代品,所以这至少似乎是正确的实施
我不知道他们是如何在内部实现它以使其高效,所以我将不得不检查它,因为我总是在SO上创建新帐户我将无法更新此帖子,但如果有人有更多信息发布重播/编辑这篇文章
答案 1 :(得分: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";
您甚至可以在“评论”上创建限定符索引,以加快部分查询速度。