【问题标题】:Is it reasonable to create a join object when using a NoSQL database?使用 NoSQL 数据库时创建连接对象是否合理?
【发布时间】:2011-09-28 02:27:45
【问题描述】:

假设我想标记各种对象,例如公司、用户、时间序列数据。我提前知道我会想要进行查询,例如find all Companies with tag X

现在,我可以为每个对象添加一个标签行,然后 MapReduce 对查询的答案。

或者,我可以丢弃该行并创建一个 TagAssociation 对象,它将 Tag ObjectID 与另一个 ObjectID 相关联(例如 CompanyUserTimeSeries)。然后我可以更快地完成这些查询,并且无需 MapReduce。但后来我觉得我只是在使用带有友好 NoSQL 界面的 RDBMS 实践。 NoSQL 中的这些连接对象是合理的做法,还是我没有正确使用 NoSQL?

【问题讨论】:

    标签: sql database-design join nosql


    【解决方案1】:

    您所描述的实际上是一个索引 - 预先存储具有特定标签的项目列表以加快查询速度。有更简单/更惯用的方法来设置索引。

    另外,您是否考虑过如何查询 TagAssociation 对象?那不还是用 MapReduce 来查询 Tag 和 Company 属性吗?

    【讨论】:

    • 是的,所以每个TagAssociation 对象都将具有一个可标记对象的ObjectIDCompanyUserTimeSeries)和一个Tag 对象的ObjectID。因此查询就像在 Tag 字段中找到所有带有 ObjectIDTagAssociation 对象。然后我会在没有 MapReduce 的情况下找到所有用 X 标记的东西。我想在某种意义上它是一个索引,我只是一直认为它是 SQL 数据库中非规范化的类比。我想知道我这样做是对的、错的还是缓慢的。感谢您的所有帮助!
    • 听说这叫二级索引。
    【解决方案2】:

    通常 map/reduce 用于非常大的数据集,而不是为了快速我需要这种信息。为此人们建立了自制的索引(有时从当前数据中映射/减少它们)。

    另一种方法是 playOrm,它可以进行连接等(但在分区上而不是在整个表上)。以这种方式,如果您可以获得一月的分区或帐户 1234 的分区,并使用普通 SQL 查询它并与其他内容连接。 playOrm 在后台使用典型的 noSQL 索引模式为您进行索引。

    后来, 院长

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-29
      • 2022-01-27
      • 1970-01-01
      • 2011-10-12
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      • 2012-04-22
      相关资源
      最近更新 更多