只需阅读这些行-
如果您的数据本质上是对象,则使用对象存储(“ NoSQL”)。它们将比关系数据库快得多。
如果您的数据本质上是关系型的,那么关系数据库的开销是值得的。
从-
http://seldo.com/weblog/2011/06/15/orm_is_an_antipattern
那么,我怎么知道我的数据是关系型的还是面向对象的呢?
只需阅读这些行-
如果您的数据本质上是对象,则使用对象存储(“ NoSQL”)。它们将比关系数据库快得多。
如果您的数据本质上是关系型的,那么关系数据库的开销是值得的。
从-
http://seldo.com/weblog/2011/06/15/orm_is_an_antipattern
那么,我怎么知道我的数据是关系型的还是面向对象的呢?
Answers:
冒着被炸成碎片的风险,我将尝试使用简单的英语定义。
对我来说,“关系性质”的含义是:特定类型的所有项目都具有几乎相同的属性,这使得设计一个简单的表变得非常容易,但是将所有项目都放入该表中,然后再通过SQL执行CRUD和检索。另外,如果可以对数据进行建模以使所有项目都具有一组有限的类型之一,则可以定义与该组类型相对应的关系数据结构。
“对象性质”翻译为:相似类型的项目可以具有多种属性,并且这些属性在性质和类型上可以具有多种多样。通常,可以(经过足够的努力)将其转换为关系模型,但是很多表的填充非常稀疏,最终导致效率低下的LEFT OUTER联接,这使得关系数据库的性能与之相比显得缓慢到NOSQL数据库。
我不得不说,从我的角度来看,没有严格的界限将这两者分开。您可能会发现许多介于两个极端之间的示例。
好的,所以现在我向各个方向的狙击手敞开大门。欢迎任何意见。让我们看看是否可以一起改进此定义。
数据都是两者。
(严格来说,它本质上不能成为对象,因为它缺乏行为,但我们不会挑剔)。
在RDBMS或NoSQL数据库中存储数据的决定更多地取决于您打算如何使用数据,而不是数据本身的真正“性质”。
如果您打算支持数据的所有导航路径,那么您可能希望将数据存储在RDBMS中,因为您将使用不同的方式来访问和显示数据。您需要数据库为您做很多繁重的工作。例如,可以通过客户,销售人员,sku(项目),日期,地区等访问“订单”数据。
另一方面,如果您的导航路径最少,则可以只存储整个对象。例如,仅可由Web前端访问并且不能长期存储或分析过多的“篮子”可能更适合于NoSQL存储。使用(文档或键值)NoSQL数据存储所做出的牺牲是,在没有集合之间的关系的情况下-如果不需要这些关系(用于导航路径,即席查询或报告),并在您的数据库中加以照顾应用程序,那么您会没事的。
当然,您可以出于两种原因同时存储数据,但这有其自身的缺点。
我认为这篇文章的重点是:
"Likewise, sometimes the output will be a single object X, which is easy to represent. But sometimes the output will be a grid of aggregate data, or a single integer count"
在我看来,作者提出了一个很好的观点,即如果您的代码例如出于某种逻辑考虑而获得了“西班牙的客户数量”,那么您不应在西班牙的所有客户中填充客户列表,然后再进行计数客户对象。(ORM可能会推动您这样做)
显然,您无法从客户数据结构本身中得知是否会那样使用它。因此,我认为我们应该将“数据”解释为“您的应用程序使用的所有信息”。如果这包括聚合或“与Y相关的所有X”之类的内容,则您的“数据”不适合原子NoSql方法