arrays - 对于数百万个对象,如果实时需要,是存储在数组中好还是存储在像redis这样的数据库中好?

标签 arrays algorithm storage redis simulation

我正在开发一个模拟,其中可以有数百万个可以相互交互的实体。目前,所有实体都存储在一个列表中。将对象存储在像 redis 这样的数据库中而不是列表中会更好吗?

最佳答案

注意:我认为这是用 Java 实现的(习惯的力量)。如果不是 Java,我的答案就不是很有用。

对您的需求做出很多假设,如果满足以下条件,我会考虑使用 Redis:

  • 由于数百万个对象,您遇到了 Not Acceptable GC 暂停,或者
  • 您创建的实体可以在多次模拟运行中重复使用

具有巨大堆和大量长期对象的 Java 应用程序可能会遇到很长的 GC 暂停,具体取决于工作负载。也就是说,老一代充满了数以百万计的元素,并且它们永远没有资格被收集。无论如何,会定期进行一次完整收集(除非您是 GC 调优大师),并且必须扫描旧代中的数百万个对象。每次发生这种情况可能需要好几秒钟,并且在这段时间里你会被卡住。如果发生这种情况并且您不喜欢它,您可以将所有这些长期存在的对象卸载到 Redis,并支付访问它们的序列化/反序列化成本,而不是 GC 暂停。

关于重用实体的另一点:如果您加载一个大的 Redis 数据库,然后在模拟结束时删除其所有数据,感觉有点浪费。如果您可以在模拟运行中重复使用实体,则可以通过将它们保留在 Redis 中来节省大量时间。

关于arrays - 对于数百万个对象,如果实时需要,是存储在数组中好还是存储在像redis这样的数据库中好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6734529/

相关文章:

java - 我需要创建一个 Jpanel 数组,但还需要使用按钮将正确的面板设置为按下时可见

javascript - 为什么在 JavaScript 中 {} + {} 变为 "[object Object][object Object]"而 [] + [] 变为空字符串?

r - 如何获取图中强连通分量的边列表?

php - 什么算法适合温度系统发送邮件?

java - 模运算 : Division over factorials % Prime

Android:如何在不存储文件的情况下从相机获取图像?

mysql - 具有逗号分隔列表的数据库列的语法 - mySQL `IN` 运算符

python - 如何使用(文本)行和列标签打印对齐的 numpy 数组?

mysql - 不是mysql的作业存储引擎?

azure - 为什么无法从虚拟机中分离磁盘?它说这是因为找不到存储。但我已经删除了存储