我对NoSQL概念有很多怀疑。
我可以理解NoSQL数据的存储方式,但不了解如何推断最佳方式以及如何分发数据。
例如,数据存储。 如何存储订单? 选项A:
customers: [customer {data1, data2,..., orders: [{data1, products [{data1, data2, quantity,...}]}]
选项B:
customer: [customer {data1, data2, Data3, ...}]
orders: [{customerId, data1, products [{data1, data2, quantity}]
选项C:
customer: [customer {data1, data2, Data3, ...}]
products [{data1, data2, ...}]
orders: [{customerId, data1, products [{productId, quantity}]}]
B和C选项有关系,但A重复了很多信息。什么是最好的策略?
感谢。
答案 0 :(得分:1)
对于大多数nosql数据库(键值,列和文档;图形数据库是一个完全独立的野兽),连接很昂贵 - 甚至可能需要在应用程序代码中实现。因此,最好对表进行非规范化,选项A优先于选项B优先于选项C.
有时候这没有意义:有时一段数据足够大并经常重复,非规范化会占用太多的磁盘空间(这很便宜,但肯定不是免费的),有时你需要最新最好的一块在这种情况下,非规范化的数据可能不合适,因为更新可能需要很长时间才能传播,有时非规范化是过度的,因为您不经常需要数据。在这种情况下,您可以选择以下几种方法:
products
)时,您将新数据存储在缓存中;当您检索包含非规范化关系(customers
)的记录时,检查是否有更新版本的数据在缓存中;在将非规范化关系传播到所有记录之后,数据将从缓存中删除。