Design patterns 如何正确存储与Microsoft Azure表存储的数据关系?
来自关系世界,Azure表存储的情况显然非常不同。我遇到的第一件大事是如何正确地存储多对多关系 例如,我可能有一个跟踪用户和他们拥有的书籍的系统。我在这里找到了另一篇文章,建议在用户上有一个String属性,它基本上存储了用户拥有的图书ID列表。虽然我知道有时这是一种公认的数据存储方式,但问题是Azure只允许您以字符串形式存储64KB的数据。这无疑限制了用户可能拥有的图书数量 另一种可能的解决方案是使用重复数据。我可能有一个存储系统中所有已知书籍的表。但是当用户需要与一本书关联时,我会将书数据复制到另一个名为OwnedBooks的表中,该表本质上与书表完全相同,只是它也有OwnedByUserID属性 还有其他可能的解决办法吗Design patterns 如何正确存储与Microsoft Azure表存储的数据关系?,design-patterns,database-design,azure,Design Patterns,Database Design,Azure,来自关系世界,Azure表存储的情况显然非常不同。我遇到的第一件大事是如何正确地存储多对多关系 例如,我可能有一个跟踪用户和他们拥有的书籍的系统。我在这里找到了另一篇文章,建议在用户上有一个String属性,它基本上存储了用户拥有的图书ID列表。虽然我知道有时这是一种公认的数据存储方式,但问题是Azure只允许您以字符串形式存储64KB的数据。这无疑限制了用户可能拥有的图书数量 另一种可能的解决方案是使用重复数据。我可能有一个存储系统中所有已知书籍的表。但是当用户需要与一本书关联时,我会将书数据
除了这个问题,还有人对使用Azure表存储时的其他模式和实践有什么好的建议吗?你没有。在Azure表上有一个很好的CompreHnive(.docx链接),其中有一个关于最佳实践的部分。但是,对于非关系属性包或ORM类型设计,应该使用表。如果您希望在云中使用关系数据库,那么应该使用
下面是另一个关于无模式存储与关系存储的比较。这是针对a的,但概念是相同的。有很多解决方案,当然都有缺点:-)
{
名称:“User1”,
第4325卷:对,
第5123卷:真的
}
另一个可能是这样的:
{
名称:“User2”,
第5346卷:对,
第8753卷:对,
第6135卷:对
}
然后,如果您确实希望找到拥有特定书籍的所有用户,您可以选择该特定属性为真的位置(好吧,它只需要真的存在)
这种方法的明显缺点是它有点脆弱,你需要在属性名中修改键,并且你无法使用StorageClient的标准方法来实现这一点-你必须自己滚动。此外,Azure在一个实体上只支持255个属性。尽管如此,我认为它可以很好地扩展-尽管我从来没有这样做过试过了如果在主表的同时更新映射表中的数据的成本太高,您可以将一条消息放在队列中,并让一个工作角色为您异步执行更新。我不一定要在云中使用Realational。我想了解人们如何将这些keystore/bag数据库与我提供了一个简单的例子。我无法想象任何需要数据之间关系的项目不能/不应该用于此数据库或类似数据库。+1用于Azure Table白皮书。有点离题,但在阅读此答案后,我在internet上进行了快速搜索,找到了所有Azure相关白皮书的url,这可能会导致ove在不同的环境下非常有用:选择选项2似乎相当便宜,尽管它有缺点。因为每100000个事务只需花费0.01美元。每个事务都是对存储权限的一个查询?因此更改书名只会产生一个查询,然后在表中更新找到的每个实体。但这取决于ds ofc取决于您正在更新的数据量。但是,如果更新量很少,那么就可以了。不是吗?