Hbase 如何在hypertable中设计用户表

Hbase 如何在hypertable中设计用户表,hbase,bigtable,hypertable,Hbase,Bigtable,Hypertable,我想在hypertable数据库中设计一个包含以下字段的用户表: rowkey : (unique Guid) username : (unique in the table) email : (unique in the table) passwordHash : (string field) passwordSalt : (string field) firstName : (string field) lastName : (string f

我想在hypertable数据库中设计一个包含以下字段的用户表:

rowkey       : (unique Guid)
username     : (unique in the table)
email        : (unique in the table)
passwordHash : (string field)
passwordSalt : (string field)
firstName    : (string field)
lastName     : (string field)
现在rowkey是用户的id,我引用了很多属于用户的内容(我知道在hypertable中唯一的自动主键选项是guid) 我不使用用户名作为行键的原因是,用户名可以更改,如果发生更改,我将不得不更新整个数据库中的很多内容。 同样的角色也附加到电子邮件字段

现在用户可以使用用户名或电子邮件登录。 所以我需要通过电子邮件或用户名检索整行


你能帮我设计这个表格吗?谢谢。

如果你下载超表格资源(或在线浏览资源),那么你会发现一个PHP示例项目,它实现了一个类似twitter的微博站点。基本上,它实现了与您要求的相同的用户表(有一个区别:它使用用户名作为行键)。 但是您可以很容易地更改它并改用GUID

(虽然,从用户的角度来看,我认为您很少更改用户名,而且我不知道有任何网页提供此功能。更改电子邮件地址或位置当然是必要的。)

以下是生成数据库的脚本(查找“profile”表):

为什么不使用电子邮件作为行键?这将是理想的选择-尤其是如果你必须通过电子邮件查找。如果用户将通过电子邮件更改它,那么我将需要更新所有表中的所有引用。我需要在键中输入一些不会改变的值。我会对id、电子邮件和用户名有同样数量的要求。我知道,只有电子邮件会改变还是用户名也会改变?如果其中一个或两个都可以更改,则需要在HBase或external中使用索引。电子邮件和用户名可以更改。在hypertable中,它们具有内置索引。我不知道hbase是否也有内置索引我在twitter示例中遇到的问题是,用户使用电子邮件或用户名登录,因此我需要通过电子邮件或用户名进行查询。而不是通过guid(行键)。hypertable是面向列的数据库,因此对于两列的查询,我认为最好的方法是对用户名和电子邮件列字段使用列限定符功能,例如:login:username login:email,然后进行类似“select login from accounts where login=”username/email的查询“然后我将找到行键并按行键再次查询。如果您使用用户名(或电子邮件)作为行键,那么您唯一的问题是,一旦用户更改其用户名(或电子邮件),您就必须复制所有这些行。”。除此之外,没有缺点。但是,如果您想使用GUID,那么您可以简单地使用一个列族将用户名(或电子邮件)映射到GUID,即单元格值包含用户名,行键是GUID。然后运行“从guid=”的帐户中选择guid”email@blah.com“,并获取行键。确保在“guid”列族上创建辅助索引。您甚至不需要为此使用列限定符。