Как я могу массово загружать и преобразовывать реляционные данные в агрегаты в RavenDB? - PullRequest
1 голос
/ 24 мая 2011

Я пытаюсь понять, как эффективно выполнять массовые вставки реляционных данных в RavenDB, особенно при преобразовании реляционных данных в агрегаты.

Допустим, у нас есть два файла дампа из двух таблиц: Orders и OrderItems.Они слишком велики для загрузки в память, поэтому я читаю их как потоки.Я могу прочитать каждую таблицу и создать документ в RavenDB, соответствующий каждой строке.Я могу сделать это как массовые операции, используя пакетных запросов .Пока просто и эффективно.

Затем я хочу преобразовать это на сервере, избавиться от OrderItems и интегрировать их в родительские документы Order.Как я могу сделать это без тысяч обходов?

Кажется, ответ лежит где-то между обновлениями на основе набора , живыми проекциями и денормализованными обновлениями но я не знаю где.

1 Ответ

2 голосов
/ 24 мая 2011

Вам необходимо сделать это с денормализованными обновлениями и обновлениями на основе набора . Взгляните на PATCH API , чтобы увидеть, что он предлагает. Хотя обновления, основанные на наборе, вам нужны только в том случае, если вы планируете обновлять сразу несколько документов, вы можете просто применить исправление к известному документу напрямую, используя API PATCH.

Прямые проекции помогут вам только тогда, когда вы получаете результаты запроса / индекса, они не изменяют сами документы, а только то, что возвращается с сервера клиенту.

Однако я бы порекомендовал, если это возможно, объединить Order и соответствующие OrderItems в памяти перед отправкой их в RavenDB. Вы по-прежнему можете передавать данные из файлов дампа, просто используйте при необходимости некоторое кэширование. Это будет самый простой вариант.

Обновлено Я сделал пример кода , который показывает, как это сделать. Это исправляет массив / список Comments в определенном документе Post, в данном случае "Posts / 1"

...