也许这可能是由于设计不佳,所以任何建议都会受到赞赏。
我有一个图形数据库,可帮助我根据继承建模对象关联,例如
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,并获得正确的部分之外,还有另一种更好的方法吗?
答案 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();