OrientDB выбрать количество записей из всех классов графа

Любой способ получить количество записей для каждого класса графа (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)?

2 ответа

Решение

Основная идея - найти способ:

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

Я думаю, что это невозможно, также потому, что это не так быстро, как в консоли

Другие вопросы по тегам