在OrientDB上查询期间,我可以访问对象的群集名称吗?

时间:2015-09-18 18:43:26

标签: java orientdb

也许这可能是由于设计不佳,所以任何建议都会受到赞赏。

我有一个图形数据库,可帮助我根据继承建模对象关联,例如

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

因此,如果我买了一辆新车,我只需将其插入汽车类

后来我添加了要求,保留了一个&#34;元模型&#34;,或者对明星进入模型的所有数据的愿景,同时保持用户的数据分离,为实现这一点,我决定每个用户的数据应该转到单独的集群集。

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

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

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

在同一级别:Car,驻留其他稍后将与汽车相关的类,例如割草机,自行车,所有这些类都是动态创建的,数据和关系的集群也是如此。

底线,模型看起来像一棵树,在那里使用关系,我关联不同类型的对象,并区别于用户A到用户B,我使用集群,但在查询时我只有集群名称的前缀,但我的根元素所在的实际集群对我来说是未知的。

为了概括,我需要找到一种方法来为personA:

做这样的事情
 select * from Element e where in.in.size() is null (and 'e' resides on cluster starting with personA)

除了在orientEngine上做第一部分,并编写第二部分以获取clusterName,并获得正确的部分之外,还有另一种更好的方法吗?

2 个答案:

答案 0 :(得分:1)

来自orientDb团队的回复:

Hi Camilo,

在此阶段无法访问查询中的群集名称。您可以定义一个自定义javascript函数,该函数根据记录(使用本机API)检索集群名称,然后在查询中使用此函数。 无论如何,每个用户使用一个集群的想法可能会导致一些问题:在当前版本中,每个数据库最多只有32.000个集群,因此您可能会耗尽可用的集群。 我建议你采用不同的策略,例如。添加用户实体并从Element记录中链接它。这样您的查询就会直截了当

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

答案 1 :(得分:1)

虽然无法在查询中完成,但它内置于Java API中。对getClusterIdByName的调用只是在OrientDB Java API使用的ConcurrentHashMap中查找类/表名。

OObjectDatabaseTx objectDB = OObjectDatabasePool.global().setup(1, 4).acquire(dbName, dbUser, dbPassword);
int clusterId = objectDB.getClusterIdByName("ClassName");
objectDB.close();