Массивы документов Arangodb против набора ключей / значений - PullRequest
0 голосов
/ 08 января 2019

Есть ли ограничения на количество значений массива в документе, отличных от размера документа? Начиная с версии 2.8 Arangodb может индексировать массивы, так что нет причин переходить к формату сбора ключей / значений.

например. групповой документ с массивом элементов:

{'_key': group1, members: [1, 2, 3, ...]} 

Существует ли ограничение на размер элементов массива? Что лучше из соображений производительности разбить это в коллекции ключ / значение {group: group1, member: 1}?

1 Ответ

0 голосов
/ 08 января 2019

В ArangoDB нет искусственного ограничения числа значений массива или ключей объекта.

Однако есть несколько практических ограничений, которые вы можете рассмотреть:

  • чем больше элементов массива / объекта вы используете в документе, тем больше размер документа будет увеличиваться. Производительность чтения и записи отдельных документов, очевидно, зависит от размера документа, поэтому чем они больше, тем медленнее это будет и тем больше памяти будет занимать каждый отдельный документ во время запроса. Это особенно вредно для механизма хранения RocksDB, поскольку из-за структуры уровней RocksDB каждая редакция документа, возможно, должна быть протолкнута через различные уровни дерева LSM и, следовательно, должна копироваться / записываться несколько раз.
  • При поиске указания ключей объекта в документах обычно используется двоичный поиск, поэтому его производительность логарифмически уменьшается с количеством ключей объекта. Однако производительность полной итерации всех ключей объекта или всех значений массива будет расти линейно с числом членов.
  • при использовании огромных документов из JavaScript-функций ArangoDB, например, при использовании микросервисной инфраструктуры Foxx ArangoDB документы должны быть преобразованы в простые объекты и массивы JavaScript. Реализация JavaScript V8, используемая ArangoDB, должна вести себя хорошо для небольших и средних объектов / массивов, но у нее есть проблемы с огромными значениями. Кроме того, он также может ограничивать количество ключей объекта / членов массива внутри.
  • , заглядывающий в середину массива из запроса AQL, обычно не использует какой-либо индекс. То же самое верно при запросе произвольных ключей объекта. Для объектных ключей существует возможность создания индекса по выделенным ключам, но очевидно, что ключи должны быть известны заранее.

Все это говорит о том, что вы все равно можете убедиться, что объекты / массивы не будут чрезмерно большими, потому что в противном случае производительность и использование памяти могут снизиться.

...