OrientDB большое количество данных подал медленный ответ - PullRequest
0 голосов
/ 28 июня 2019

Мы добавили 15 миллионов записей в orientdb для огромного тестирования производительности запросов данных.

Конфигурация системы: Linux, 2Cpu и 4 ГБ ОЗУ

var X;
for(var i=1;i<15000000;i++)
{
  X='insert into customer set id='+i+',name=\'SENTHIL'+i+'\',age='+i;
  db.command(X);

} 

БД / Коллекция Картинка: DB/Collection Picture

Индексное изображение БД DB Index Picture

Где попытаться получить записи, как показано ниже, мы получили медленный ответ

select count(age) from customer where age > 100000 and age < 999999

Запрос выполнен за 7,652 с

select count(age) from customer where age > 1000000 and age < 9999999

Запрос выполнен за 183,465 сек.

explain select count(age) from customer where age > 1000000 and age < 9999999

+ FETCH FROM INDEX customerAge
  age > 1000000 and age < 9999999
+ EXTRACT VALUE FROM INDEX ENTRY
  filtering clusters [25,26,27,17,16,19,18,21,20,23,22,24,15]
+ FILTER ITEMS BY CLASS 
  customer
+ CALCULATE PROJECTIONS
  age AS _$$$OALIAS$$_1
+ CALCULATE AGGREGATE PROJECTIONS
      count(_$$$OALIAS$$_1) AS _$$$OALIAS$$_0
+ GUARANTEE FOR ZERO COUNT 
+ CALCULATE PROJECTIONS
  _$$$OALIAS$$_0 AS `count(age)`

Как мы можем исправить медленный ответ?

1 Ответ

0 голосов
/ 28 июня 2019

мое первое впечатление о OrientDB было похоже.БД, казалось, работала хуже, чем обычная реляционная база данных.После экспериментов с незначительными улучшенными запросами, которые имитировали поведение СУБД, я постепенно отошел от «реляционного мышления».

Для меня преимущества OrientDB появились после реорганизации данных.Поскольку я имею дело с данными, связанными со временем, я решил сначала создать мощную поисковую среду: временной график (https://github.com/topofocus/orientdb_time_graph).. Назначая структурированные и неструктурированные данные в сетку, я могу очень быстро получить доступ ко всему, еслитолько у меня есть представление о сроках. Чем лучше предположение, тем быстрее отклик.

Что я узнал: еще важнее правильно организовать данные в граф-базе данных, чем в реляционной.

Чтобы сократить время отклика, я предлагаю кластеризовать данные во время ввода, поместить маленькие возрасты в класс small, ... и т. Д. В результате вы всегда можете запустить запрос на дыренабор данных (выберите из числа клиентов), но если вы знаете возрастную границу вашего дочернего класса, вы (или лучше: движок базы данных) можете сосредоточиться на этом.

...