2015-09-18 43 views
0

也许这可能是由于糟糕的设计,所以任何意见将不胜感激。在OrientDB上查询期间,我可以访问对象的群集名称吗?

我得到了一个图形数据库,可以帮助我基于继承的对象模型关联,例如

class:Element <----- class:Car 

所以,如果我得到一个新的汽车,我只是将它插入汽车类

后来我为了实现这一目标,我们添加了需求,保留“元模型”或明星进入模型的所有数据,同时为用户保留数据分离,我决定每个用户的数据应该分别设置的集群。

因此,如果personA试图在汽车内插入某些东西,系统将自动创建新的集群,并将该元素放在正确的集群上。

class:Element <----- class:Car ------ cluster:personA_Car 

该模型对关系和其他类型的元素应用相同。

在同一级别的车上:汽车,居住在其他将要与汽车相关的类中,例如割草机,自行车,所有这些类都是动态创建的,以及数据和关系的集群。底线,模型看起来像一棵树,其中使用关系,我关联不同类型的对象,并区分从用户A到用户B,我使用群集,但是当查询我只有群集的前缀时名称,但我的根元素所在的实际群集对我而言未知。

一概而论,我需要找到一种方法,能够做这样的事了的人物:

select * from Element e where in.in.size() is null (and 'e' resides on cluster starting with personA) 

除了做对orientEngine第一部分,和编码第二部分以获取集群名称,并得到正确的,是否有另一种更好的方法?

回答

1

答案从orientDb团队收到:

嗨卡米洛,

在这个阶段是没有办法访问,在查询内部群集名称。您可以定义一个自定义JavaScript函数,该函数根据记录(使用本机API)检索群集名称,然后在查询中使用此函数。 无论如何,每个用户使用集群的想法可能会导致一些问题:在当前版本中,每个数据库最多有32000个集群,所以您可能会用完集群。 我建议你采取不同的策略,例如。添加一个用户实体并将其与您的元素记录链接起来。这样,你的查询将是直线前进

原帖 https://groups.google.com/forum/#!searchin/orient-database/Can $ 20I $ 20access $ 20Cluster $ 2FS $ 20name $ 20for $ 20objects $ 20during $ 20A $ 20query /方位数据库/ YvKaRLeHWqI/A78ZIkBABQAJ

1

虽然不能在查询中完成,它被内置到Java API中。对getClusterIdByName的调用只是在OrientDB Java API使用的ConcurrentHashMap中查找类/表名称。

+0

谢谢,但实际上这个“奇怪”的要求让我意识到设计上有一个错误。但在其他任何情况下,您的代码都是正确的解决方法。 –

相关问题