DynamoDB数据库设计(Key-Value Store,noSQL)

时间:2012-03-17 17:43:24

标签: database-design nosql amazon-simpledb key-value-store amazon-dynamodb

我已经习惯了MySQL,现在试图掌握如何使用键值存储的理解。我没有看到的是好的菜鸟,比如数据库设计的例子,以及如何插入和获取信息。

这是否正确表示如何将来自MySQL的数据存储在键值存储中?

TYPE: MySQL
TABLE: users
COLUMNS: user_id(primary), username, location

TYPE: Key Value Store
TABLE: users
KEY: user_id
VALUES: username, location

所以,如果我在上面是正确的。提取一般用户信息很容易理解。但是,我如何在键值存储中预先形成以下查询?

SELECT username FROM users WHERE location = 'mexico'

我认为你可以轻松地做到这一点的方法是创建另一个表。 (假设有超过5,000个用户,我确定如果你只有几百个,还有其他方法可以做到这一点)

--Original Table--
TYPE: Key Value Store
TABLE: users
KEY: user_id
VALUES: username, location

--Additional "query" Table--
TYPE: Key Value Store
TABLE: user-location
KEY: location
VALUES: user_id

然而,现在我们需要在有人加入时调整两个表,更新他们的位置等等。我认为这不是一个大问题,你只需要对你的应用程序代码非常准确。

这是解决这些问题的最佳方法吗?或者我错过了什么?

4 个答案:

答案 0 :(得分:2)

更新的答案(2014年1月)

DynamoDB开始支持Global Secondary Indices,这意味着您现在可以在该位置放置一个索引,并快速检索那些在墨西哥生活的人。

请注意,在撰写本文时(可能会更改),您无法向现有表添加索引。

原始答案(2013年3月)

一般关于NoSQL的注释:
NoSQL DBMS通常关注可扩展性 它们通常还会根据更多服务器端代码添加应用程序开销。

您应该问自己“我需要多少次从墨西哥查询用户”
在为数据库建模时,答案可能会指导您采用正确的方法 这也是没有“完美契合”而且没有真正的“noob样本”的原因(至少据我所知)

现在特别关注DynamoDB,您没有二级索引的奢侈品(与其他NoSQL解决方案相比),因此您需要创建表格作为索引。 在您的模型中,您可以创建一个表,其中哈希键是位置,范围键是用户ID。因此,通过QUERY API调用,您可以获得所有MEXICO用户。

您也可以考虑其他实现,例如将ID连接在一个对象中,但同样,因为DynamoDB只允许64KB对象 - 您可能会在这里遇到扩展问题。

答案 1 :(得分:1)

以下是YouTube上的最新视频,该问题可以很好地解答。大约10分钟的标记是他们开始讨论使用DynamoDB的细节。但整个视频对于想要了解更多信息的人来说是个好消息。

网络研讨会:Amazon Dynamo数据库 - http://youtu.be/meBjA68DeIU

答案 2 :(得分:1)

不要自己管理单独的索引表。

而是使用新的global secondary index功能。

答案 3 :(得分:0)

如果你的设计最终会根据位置进行大量的查找,那么你应该重新设计用户表,其中Location为hashkey,userId为range key。 但是上面的方法删除了在用户名上或用户ID上查询用户的能力,同时插入新用户也无法检查userID中的唯一性(与MySql中的主键相反)。

现在,如果您不经常根据位置进行搜索,那么执行扫描操作可能是更好的解决方案。

最好的方法就是你提到的根据你的需要在API级别上进行所有这些处理。