鉴于ElasticSearch NoSQL数据库,我试图找出如何最好地建模社交关系数据(是的,图形数据库将是这项工作的最佳工具,但在我目前的情况下,这种选择可能会强加给我) 。如何建模ElasticSearch中的社交连接?
我是ElasticSearch的新手,并且正在审查建模关系的方法,但它们似乎不适合用于社交关系的用例,或者至少对于我来说这些将如何建模并不明显。
A的我的要求大大简化版本如下:
- 人都有编号,名称和工作地点(他们可能没有一个工作的地方)
- 人们可以与其他人的友谊关系(和友谊创造的日期)
- 人可以阻止其他人谈论他们(方向性的问题,因为只有谁能够阻止解锁一个)
- 人们可以在同一工作场所 工作
的事情,我们很可能会查询:
- 给我所有我与(给我的ID)的朋友的人
- 给我所有我一起工作的人(给我的ID)
- 给我上述2的联合,以及他们工作地点的名称和ID,但不是我阻止或阻止我的那些人。
- 给我所有在我工作的城市有工作地点的朋友。
虽然查询看起来他们可能是一个挑战,我更感兴趣的是简单的造型的人,工作场所,并在ElasticSearch在这样一种方式,它是有道理它们之间的关系,为维护和这可以支持这些查询。
文档告诉我ElasticSearch没有连接。它具有嵌套对象和父子关系,但这两者似乎都不适合人与人之间的友谊关系;嵌套对象和父子都具有单一所有权的隐含概念......除非我开始在其他人员对象(用于朋友和被阻止)以及在工作场所中复制人员数据。这当然会引入保持数据一致性的问题,因为变化的人员数据需要在任何地方更改其复制的数据,并且消除友谊关系必须消除与其他人的关系的另一方。这也带来了交易问题,因为我听说不支持跨不同文档的交易支持。
除了非规范化和重复,或db外的应用程序端连接,还有没有更好的方法(除了使用不同的数据库)以一种比较容易查询的理智模式进行建模?