我可以在 OrientDB 查询期间访问对象的 Cluster/s 名称吗?

Can I access Cluster/s name for objects during a query on OrientDB?

这可能是设计不佳造成的,如有任何建议,我们将不胜感激。

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

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

所以如果我买了一辆新车,我就把它插进车里 class

后来我又增加了需求,要保持一个"metamodel",或者说所有star进入模型的数据的愿景,同时为用户保持数据分离,为了实现这一点,我决定数据对于每个用户,应该去单独的一组集群。

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

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

此模型同样适用于关系和其他类型的元素。

在class:Car的同一层,还有其他class后面跟车有关的东西,比如割草机,自行车,这些class都是动态创建,数据和关系的集群也是如此。

最重要的是,模型看起来像一棵树,我使用关系关联不同类型的对象,为了区分用户 A 和用户 B,我使用集群,但在查询时我只有前缀集群名称,但我不知道我的根元素所在的实际集群。

总而言之,我需要找到一种方法来为 personA 做这样的事情:

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

除了在orientEngine上做第一部分,第二部分编码得到clusterName,并得到正确的,还有其他更好的方法吗?

从 orientDb 团队收到的答复:

嗨,卡米洛,

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

原创post https://groups.google.com/forum/#!searchin/orient-database/Can$20I$20access$20Cluster$2Fs$20name$20for$20objects$20during$20a$20query/orient-database/YvKaRLeHWqI/A78ZIkBABQAJ

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

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