关于在堆外持久保存Map <String,String <Object >>的数据库建议

时间:2020-01-27 17:03:20

标签: database caching database-design redis in-memory-database

我正在运行库存服务,我将从每个商店获取每个项目的库存状态的单独消息。我需要在item_id级别进行汇总。我需要在约10毫秒的时间内检索汇总信息。

我基本上需要这样做List<item_store_level_inventory> --> Map<item_id,Map<store_id>>(以便我可以使用O(1)操作更新内部Map.Entry并使用O(1)操作检索外部Map.Entry。我看过Redis < / p>

  1. 将item_id作为键,并将item_store的字符串化数组作为值。 缺点:我将遇到比赛状况,我必须在item_id上分配锁,而我想远离它
  2. 使用哈希。 item_id将是哈希ID,store_id将是单独的哈希。 缺点:item_id级别的检索为O(n)。我还没有描述它

这是我的统计信息:

计数(项)-500万

计数(商店):3K

最大(每个项目可存储的数量):1K

数量(唯一商品店):7000万

只是让您了解数据大小,我在项目存储级别存储的只是3个值。现有,已分配和保留。

持久性无关紧要,因为我可以通过压缩的kafka主题轻松地重现此问题。

FWIW,当前,它在oracle中运行。我的组织热衷于从Oracle转移到内存数据存储。

apt数据存储上的任何指针将不胜感激

1 个答案:

答案 0 :(得分:1)

只要您已经有一个与Oracle一起运行的解决方案,那么将该解决方案映射到内存中的SQL数据库(无双关语)应该很简单。我不相信NoSQL解决方案可以为您带来任何真正的优势,并且至少具有您已经确定的缺点。