Database design 超表数据库设计

Database design 超表数据库设计,database-design,nosql,hypertable,Database Design,Nosql,Hypertable,有人能告诉我这里的post/pdf/explan吗?在这里我可以了解更多关于超表格数据库设计的信息。我在谷歌搜索了很多次,但没有找到任何有用的信息 我的主要问题是如何存储您“不能”表示为键值的数据。例如,假设我想要跟踪用户评论,我可以简单地模拟关系数据库,生成新的评论密钥存储我需要的所有数据,然后对于产品X,将json格式的所有评论的密钥存储到X.reviews 我想到的另一件事是简单地使用x.reviewKeys,然后为每个生成的review推送新键作为该单元格的新版本,假设我可以存储同一单元

有人能告诉我这里的post/pdf/explan吗?在这里我可以了解更多关于超表格数据库设计的信息。我在谷歌搜索了很多次,但没有找到任何有用的信息

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

我想到的另一件事是简单地使用x.reviewKeys,然后为每个生成的review推送新键作为该单元格的新版本,假设我可以存储同一单元格的无限多个版本

第二种方法对我来说似乎更合适,因为我将用代码实现的所有工作都留给数据库

有人知道如何处理这个问题吗,或者更确切地说,谷歌如何用他们的bigtable处理这个问题呢?

这“几个小时”搜索任何可能导致理解超表数据库设计的东西肯定是不够的,但如果有人通过谷歌来实现这一点,这里是一个起点

现在据我所知,到目前为止,您可以定义列族,比如,
reviews
,每个列族可以有无限多个键,例如,如果您尝试存储用户数据,您可能会编写类似的代码

userKey:info
并具有多个属性,如,
名称、地址、电子邮件
。。。您可以通过定义该条目的键来访问该信息,例如,要获取用户
地址
,您可以使用
userKey:info:address
作为键

使列族不同的一点(如果我理解得很好的话)是,您可以获得列族中的所有键,例如,如果您指定
userKey:info
,您将获得
userKey:info:name,userKey:info:address,userKey:info:email
这意味着要存储我在问题中提到的所有评论,您需要创建新的列族并存储所有评论的键,最后您将得到类似以下内容的内容
key:reviews:
,它将返回ID(如果您要求它返回键:评论)在所有评论中,您只需使用该ID获取有关特定评论的详细信息

所以,基本上就像在列family info中有属性名称、地址、电子邮件一样,在这里您可以使用review ID作为列属性

现在,至少在一定程度上可以肯定我是对的,我还检查了riak数据库设计(键/值数据库与hypertable不同,hypertable是列数据库?),它们似乎有bucket作为列族的替代,所以这至少看起来是正确的实现


我不知道他们是如何在内部实现这一点来提高效率的,所以我必须检查一下,因为我总是在上面创建新帐户,所以我无法更新这篇文章,但是如果有人有更多的信息发布重播/编辑这篇文章

,所以如果我理解正确,你有一个包含产品的表和另一个包含评论的表,他们之间的关系是1:n(每个产品可以有多个评论)

一种方法是使用列限定符

您的产品表有一个行键(即产品id),一些列用于标题、说明、制造商等,还有一列“评论”:

对于评论,您可以创建一个唯一的键,即行键的GUID(或足够大的随机数或唯一的时间戳;我将在我的示例中使用GUID):

要创建1:n关系,请将审阅的行键作为限定符插入“审阅”列族(实际单元格值不需要,可以为空):

以及检索产品123的所有评论:

SELECT reviews FROM Products WHERE ROW = "123";

您甚至可以在“评论”上创建一个限定符索引,以加速某些查询。

此示例不完整,您在产品中插入了什么?如何指定每个表上的键?
create table Reviews (author, rating, text);
INSERT INTO Reviews VALUES ("product-id", "reviews:1273-1234-234-123a", "");
SELECT reviews FROM Products WHERE ROW = "123";