【问题标题】:database connection: protocoling data for hundereds to million objects数据库连接:为数百到百万个对象处理数据
【发布时间】:2014-01-06 18:41:02
【问题描述】:

我正在运行经济模拟。数百或数千个代理 = 对象必须随着时间的推移对数据进行协议,数据始终具有相同的结构。它通常由许多布尔值、浮点数和整数组成,可能是数组/列表(5 到 100 个不同的变量)。在模拟期间,数据库没有读取权限。模拟后数据将不再更改。对于每次模拟,我都会创建一个新数据库。当前的编程语言是一个项目的 java 和第二个项目的 python。将来该项目也有可能在网络上运行。如果重要的话:对象通过 0mq 进行通信。我们正在使用 mySql 和 sqllight。

如何将数千个对象连接到数据库。最终结果应该都在一个数据库中。

/目前我们通过 zeromq 消息发送数据到一个写入数据库的对象。

【问题讨论】:

  • 你希望得到什么样的答案?
  • 我无法打开数以千计的数据库连接。将所有内容集中在一个写入数据库的对象中是最佳解决方案吗?你会如何设计它?
  • 您的 ZeroMQ 解决方案听起来并不合理;我可能会使用其他一些 RPC 机制(但这是主观的)。也许这个问题在Code Review 堆栈上会更好。

标签: java python mysql database oop


【解决方案1】:

如果您使用 python(并且您可以以非 sql 格式存储数据),我会推荐名为 ZODB 的对象数据库(由 zope 提供)。本质上,您将创建一个字典(它实际上可以包含您想要的任何数据类型)。我用它来做我自己的研究,效果很好。还有一个相当合理的学习曲线,这意味着您只需几天即可真正掌握它。

由于您提到在模拟过程中数据库“没有读取权限”,您可以将 ZODB 用作独立工具。但是,如果您发现自己并行运行多个模拟(例如多线程或云计算),您将不得不查看ZEO(也由 zope)以使其成为解决方案。

您的每个模拟不必是它自己的 ZODB 数据库,它可以是单个“模拟”数据库的单独键,其中每次运行的数据将整齐地嵌套在每个键下。您可以说类似:print Simulation['run99']['output'],就像您说模拟的第 98 次运行一样容易。

【讨论】:

    猜你喜欢
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    相关资源
    最近更新 更多