我正在开发一个模拟,其中可以有数百万个可以相互交互的实体。目前,所有实体都存储在一个列表中。将对象存储在像 redis 这样的数据库中而不是列表中会更好吗?
最佳答案
注意:我认为这是用 Java 实现的(习惯的力量)。如果不是 Java,我的答案就不是很有用。
对您的需求做出很多假设,如果满足以下条件,我会考虑使用 Redis:
- 由于数百万个对象,您遇到了 Not Acceptable GC 暂停,或者
- 您创建的实体可以在多次模拟运行中重复使用
具有巨大堆和大量长期对象的 Java 应用程序可能会遇到很长的 GC 暂停,具体取决于工作负载。也就是说,老一代充满了数以百万计的元素,并且它们永远没有资格被收集。无论如何,会定期进行一次完整收集(除非您是 GC 调优大师),并且必须扫描旧代中的数百万个对象。每次发生这种情况可能需要好几秒钟,并且在这段时间里你会被卡住。如果发生这种情况并且您不喜欢它,您可以将所有这些长期存在的对象卸载到 Redis,并支付访问它们的序列化/反序列化成本,而不是 GC 暂停。
关于重用实体的另一点:如果您加载一个大的 Redis 数据库,然后在模拟结束时删除其所有数据,感觉有点浪费。如果您可以在模拟运行中重复使用实体,则可以通过将它们保留在 Redis 中来节省大量时间。
关于arrays - 对于数百万个对象,如果实时需要,是存储在数组中好还是存储在像redis这样的数据库中好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6734529/