Schemaless 很棒有两个原因:
- 大脑优化文档存储的直观性
- 解决稀疏矩阵和实体属性值存储问题。
我在 Ruby on Rails 中将 SQL 和 No-SQL 用于生产应用程序。我不是数据库专家,我不得不承认在谷歌上搜索 ACID 和类似术语,因为它们对我来说并不熟悉。
“啊哈!另一个一无所知的潮流追随者跳上了最新的潮流”你可能会说。但是,实际上,我对在我们最近 2 年的应用程序上使用 MongoDB 的决定感到非常满意,这就是为什么......
大脑优化直觉的另一面是我对 Magento 电子商务系统的体验。我不想抨击它,因为它当时对我很有帮助,但它确实对处理器造成了很大的打击,试图计算每个产品的属性。根本原因是产品数据的实体-属性-值存储。缓存或被诅咒是解决方案。
对我来说最大的优势是在唯一真正重要的地方进行优化——你自己的大脑。如此多的技术因其在内存、处理器、硬件方面的效率而受到批评,但拥有一个极其直观易懂的数据库也有其自身的优点。我们发现向我们的代码中添加特性很快,因为数据库看起来很像我们正在建模的真实世界。当我要求电子商务客户向我展示他们的产品列表时,他们自然会倾向于使用 Excel(想想表格商店)。第一列很简单:
- 产品名称
- 价格
- 产品类别 (
然后它变得更难,并被注释、颜色编码和其他表格的链接所覆盖(是的..关系)
- 颜色(仅限部分产品)
- 尺寸(X 大、大、小)- 仅适用于 8'9'10 的产品,高尔夫球杆使用不同的比例
- 颜色 2. 猫项圈有两种颜色可供选择。
- 瓦数
- 固定式(公、母)
所以它以一团糟的 Excel 表格结束,这些表格对我来说毫无意义,对于日复一日使用这些产品的人来说也没有多大意义。我们举起双臂,决定浏览目录,然后它击中了我!如果您可以存储目录中出现的数据,那不是很好吗!?只是每个产品上仅列出该产品属性的记录集合。然后,您可以挑选出常用属性来编制索引,以便日后检索。当然,这是一个文档存储。
总而言之,当您遇到稀疏矩阵问题或随时间改变其属性的对象时,文档存储非常有用。在 No-SQL 世界中生活了 2 年,我想不出没有这些功能的现实世界应用程序,因为世界本身看起来就像一个文档存储。