2012-02-27 78 views
1

首先,我认为可能是非常相关的一些背景方面:实用的解决方案加入

我校对dynanodb作为一个可行的解决方案即将推出的应用。这是一个学习实验,以熟悉dynamodb产品。我的平台是amazon EC2(Linux),node.js和dynode库。

我的问题考虑一个一对多的关系时(例如标签,关键字,类别等)中没有-SQL,它是不可能的连接表的背景下出现了。起初,它似乎是一个简单的事情:只需将它们存储为属性列表。但后来我读到了64KB的限制。

所以我的问题:

的项目,包括它的属性,在DynamoDB(即一个数据库行与所有列)不能超过一共有64KB的二进制大小。那么如何检查数据以确保它不会违反这个长度呢?

显然数字是简单的,但“统一码UTF8二进制编码”字符串将是一个挑战。

这个问题的第二部分可能是明显无SQL忍者:我该如何避免碰到这种限制,同时减轻不能够连接的表的负担?一个冗长的答案很可能超出将q &的一种格式的范围,但如果任何人有意见或能提供替代方案,我应该在解决64k的长度来探索,我将不胜感激。

最佳,并提前对任何和所有的建议表示感谢。

+0

您是否担心比的标签,还是别的什么64KB有更多的一个实体?此外,没有任何解决缺乏联接的解决方案,这取决于您要替换的联接。 – BCoates 2012-02-28 16:04:53

+0

的确,没有解决方案的联接,但是如何计算节点中记录的二进制大小?这是主要问题 – Kato 2012-02-28 20:36:43

回答

1

我同意由@bcoates评论。它确实取决于你的用例。

我有几个实现(在SimpleDB中,但同样的想法),使用一个EntityRelationship表来建模连接,与相关的数据位复制到这些表。使用DynamoDB,您可以充分利用范围键实现标签,类别等...

此外,我已经使用属性跨越来解决SimpleDB中的属性大小限制(DynamoDB,同样可以实现) 。提取多个属性后重新组合整个记录。 (Range Key表格在这里也会有所帮助)

Simol(用于C#)对SimpleDB(http://simol.codeplex.com)有很好的实现,并且我知道项目所有者正在进行类似的实现对于DynamoDB - 您可能能够从该项目中获得一些洞察。

+0

这一切都很有意义,我已经看到了所有内容或论坛;但是如何计算项目/行的二进制大小以决定它需要使用属性/项目跨度的哪个点? – Kato 2012-02-28 20:37:32

+0

还是有比计算记录大小更好的选择吗?实体关系表更合理的结构? – Kato 2012-02-28 20:38:16

+0

我只是实现跨越任何可能增长大于255个字符(任意数字,只是看起来合理)的属性。你将会领先一些订购人物(000,001,002,003,... 999),所以你不会浪费太多空间。 – Hal 2012-05-01 13:58:32

1

如果有人碰到这个晚来的日子里,最大项目大小为400KB,现在,而不是64KB