Orientdb 时间和地理位置数据的数据库设计

Orientdb 时间和地理位置数据的数据库设计,orientdb,graph-databases,Orientdb,Graph Databases,我已经成功地实现了文档中所示的类似功能。最小时间单位所指向的数据(事件类)使用lucene空间索引进行索引 我有两种活动:私人活动或公共活动 我应该如何为我的用例设计数据库和集群? 使用边缘或链接列表将Min链接到事件是否更好? 我担心我的lucene空间索引将来会变得太大 通过阅读文档,看起来拥有地理定位数据将是一个伟大的战略 只能对子查询使用索引: select from (select expand(month["12"].day["25"].hour["17"].mi

我已经成功地实现了文档中所示的类似功能。最小时间单位所指向的数据(事件类)使用lucene空间索引进行索引

我有两种活动:私人活动或公共活动

我应该如何为我的用例设计数据库和集群?

使用边缘或链接列表将Min链接到事件是否更好?

我担心我的lucene空间索引将来会变得太大

通过阅读文档,看起来拥有地理定位数据将是一个伟大的战略

只能对子查询使用索引:

select 
from 
  (select 
     expand(month["12"].day["25"].hour["17"].min["07"].events)
   from 
     Year 
   where 
     year = 2015)
where
   [lat,lng,$spatial] 
NEAR 
   [66,66,{"maxDistance":1}]
关于索引的文档告诉我可以使用。坏的一面是它比链表占用更多的存储空间。我测试了它,它可以工作:

select 
  expand(inV())
from 
  (select 
      expand(month["12"].day["25"].hour["17"].min["07"].outE('MinPublicEvent'))
   from 
     Year 
   where 
     year = 2015)
where
   [lat,lng,$spatial] 
NEAR 
   [66,66,{"maxDistance":1}]

关于边与链接(取自),第一个区别是边可以存储属性,而链接不能

以下是轻量化边与常规边的优缺点:

优点:

创建和遍历速度更快,因为不需要额外的 文档以保持两个顶点之间的关系

缺点:

无法从中存储使用轻量级边的属性 SQL,因为边缘下没有常规文档

因为您已经提到在边上使用属性,这对我来说很有意义,因为您可以在边上使用这些属性来横切图形,这意味着您不能使用链接来存储该关系

如果您希望将这些属性嵌入到事件顶点上,这也很好,并且您可以使用链接,从而失去了使用边中的属性横穿图的能力,从而有利于提高性能

edge方法更具表现力,但当性能真正重要时,并且存在瓶颈风险时,您应该监控指标和性能,并重构为嵌入+链接方法,以防性能出现问题

更新

集群基本上是OrientDB中分割数据的一种机制,它同时适用于边和顶点

您还可能会发现在服务器上定位不同的集群是有益的 不同的服务器,物理上将记录存储在不同的位置 你的数据库。这样做的好处包括:

  • 优化:如果您 只需搜索类中集群的子集
  • 索引:通过良好的分区,您可以减少或删除>索引的使用
  • 并行查询:当对上的数据进行查询时,可以并行运行查询 多个磁盘
  • 切分:您可以跨多个应用程序切分大型数据集 多个实例
除非您能够清楚地确定一种划分数据的好方法,并且能够在不同的服务器之间分发数据库,否则我建议您从默认值开始,因为OrientDB已经为模式中的每个类创建了一个集群,并随着数据库的增长添加更多集群


何时添加更多集群?度量,度量和度量。跟踪应用程序访问数据库的方式、查询类型、查询量等。

更新内容非常丰富,但现在我不能完全确定问题是什么,还是关于图形模型的讨论?是的,这仍然是一个问题,但我找到了我关心的问题之一的答案,即子查询上的索引搜索。我仍然想知道我应该如何使用群集,以及如何从Min到Event(edge或linklist)建立链接。我应该发布一个答案吗?还没有回答群集,因为我还不知道,但我正在研究这个问题,并将用我的发现更新我的答案谢谢,我认为如果我想有一些不同类型的事件(将有不同的边缘类),边缘方法也会使索引变小,但正如你所说的,性能会随着扩展而降低。。。伟大的答案值得深思使用集群信息给出答案,哦,是的,对于不同类型的事件,将关系属性放在边缘也有助于模型中的解耦。