База данных Предложения по сохранению карты вне кучи - PullRequest
0 голосов
/ 27 января 2020

У меня работает служба инвентаризации, я буду получать индивидуальные сообщения о состоянии инвентаря каждого предмета из каждого магазина. Мне нужно агрегировать на уровне item_id. Мне нужно получить агрегированную информацию за ~ 10 мс.

Мне нужно сделать это List<item_store_level_inventory> --> Map<item_id,Map<store_id>> (чтобы я мог обновить внутреннюю Map.Entry с помощью операции O (1) и извлечь Outer Map.Entry с операцией O (1). Я посмотрел на Redis

  1. Имея item_id в качестве ключа и Stringified Array item_store в качестве значения. Минусы : у меня будет состояние гонки, я Я должен был распределить блокировку для item_id, от которого я пытаюсь держаться подальше
  2. Использование хэшей. item_id будет идентификатором Ha sh, а store_id будет отдельным хешем. Cons : уровень item_id поиск O (n). Я еще не профилировал его, хотя

Это моя статистика:

кол-во (предметов) - 5 миллионов

количество (магазины) : 3K

макс. (Количество магазинов) : 1K

количество (уникальный элемент- store) : 70 Million

Просто для того, чтобы дать вам представление о размере данных, все, что я храню на уровне хранилища элементов, - это только 3 значения. Зарезервировано.

Стойкая природа не имеет большого значения, так как я могу легко воссоздать ее, воспроизведя с компактной вершины kafka c.

FWIW, В настоящее время она работает в oracle. Моя организация стремится выйти из Oracle и перейти в хранилище данных в памяти.

Любые указатели в подходящем хранилище данных будут высоко оценены

1 Ответ

1 голос
/ 30 января 2020

Поскольку у вас уже есть решение, работающее с Oracle, то отображение (без каламбура), что решение для базы данных SQL в памяти должно быть простым. Я не уверен, что решение No SQL даст вам реальное преимущество и будет иметь по крайней мере те недостатки, которые вы уже определили.

...