Ну, ответ зависит от того, как вы ожидаете данные, используемые вашим приложением. Вот несколько советов о том, как мне выбрать способ хранения данных:
Меняются ли данные инвентаризации нечасто и обычно ли они необходимы при доступе к пользовательской информации? Если это так, то вам, вероятно, лучше всего использовать вариант 1 (хранение данных инвентаризации вместе с информацией о пользователе).
Хотите сделать переход от реляционного хранения документов к максимально безболезненному? Тогда вы, вероятно, можете использовать вариант 2 с отдельными коллекциями. Arangodb поддерживает объединения по всей коллекции и работает довольно хорошо.
Теперь, если вы не возражаете против кривой обучения, я бы предложил вариант 3: обход графиков. В этом случае вы должны хранить данные следующим образом:
// коллекция пользовательских вершин
{
_key: "1",
здоровье: 100,
деньги: 52,38,
....
}
// элемент коллекции вершин
{
ItemID: 1,
//, ....
},
{
ItemID: 2
//, ....
}
// Инвентаризация края коллекции
{
_from: пользователь \ 1
_to: пункт \ 1,
Количество: 7
},
{
_from: пользователь \ 1
_to: пункт \ 2,
Количество: 4
}
Поскольку ArangoDB имеет встроенную поддержку обхода графа, вышеуказанная настройка оптимизирована для действительно быстрого поиска. Основное правило при начале перехода от реляционных баз данных к графам состоит в том, что основные таблицы становятся коллекциями, а промежуточные (объединяющими) таблицами становятся реберными коллекциями. (очевидно, это еще не все, но это хорошее начало)
Если бы я начинал с нуля, я бы, наверное, сначала выбрал вариант 3. Однако, как я уже упоминал в начале, это зависит от того, как вы собираетесь использовать данные.