OrientDB select 来自所有图表的记录数 类

OrientDB select record count from all graph classes

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

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

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

但是使用 count() + GROUP BY 是极其缓慢的组合。

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

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

主要思想是想办法:

  1. 获取所有 classes 的列表 if 数据库
  2. 获取每个 class
  3. 中存储的记录数

技术细节

在 OrientDB 函数中,您可以访问具有 .getDatabase() 方法的 orient 变量。而且这个方法 return JAVA ODatabaseDocumentTx class instance. This class provides the method .countClass(className) that returns the number of the records of the class className (method documentation) 而且效果非常快。

解决方案

在 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()