1

有什么方法可以获取每个图形类(V、E 及其子类)的记录数?

我尝试为当前案例构建 SQL 格式的查询:

SELECT @class, count(*) FROM V GROUP BY @class
SELECT @class, count(*) FROM E GROUP BY @class

但是使用count()+GROUP BY是非常慢的组合。

虽然控制台命令list classes运行速度很快并返回每个类(字段)中记录计数的值RECORDS,但如何通过 SQL 查询(或通过 OrientJS API)提取此计数?

4

2 回答 2

1

主要思想是找到一种方法:

  1. 如果数据库,则获取所有类的列表
  2. 获取每个类中存储的记录数

技术细节

在 OrientDB 函数中,您可以访问具有方法的orient变量。.getDatabase()并且此方法返回 JAVA ODatabaseDocumentTx类实例。该类提供了.countClass(className)返回类记录数的方法className方法文档),并且运行速度非常快。

解决方案

在 OrientDB Studio 中创建函数,名称为“getClassCounts”,语言“javascript”,幂等:true:

var db = orient.getDatabase();
var classesRawInfo = db.getMetadata().getImmutableSchemaSnapshot().getClasses().toArray();
var classesList = {};
var i = classesRawInfo.length;

while(--i) {
    var className = classesRawInfo[i].name;
    classesList[className] = db.countClass(className);
}

return classesList;

执行:

  • 通过 SQL:SELECT getClassCounts()
于 2016-07-05T10:34:00.130 回答
0

我认为这是不可能的,也因为它不会像在控制台中那么快

于 2016-06-14T14:31:44.460 回答