有没有办法将数据动态加载到python数据结构中而无需重新创建

时间:2010-01-09 18:07:22

标签: python dynamic-data real-time

我有一个从数据库表构建列表并实时运行的进程。每隔一段时间,新数据就会被添加到数据库表中。不时地从表中查询数据既麻烦又耗时,这需要尽可能实时。解决问题的正确方法是什么?

流程如下

list从SQL查询构建,需要2-4秒才能执行。

进程A使用列表来执行某些功能

数据不断添加到数据库表中。我们只需要将新数据附加到列表中,该列表将由过程A实时使用。

我还没有尝试编写任何代码,我仍然不确定它应该是什么样的设计。 Python是我们可以使用的唯一语言,因为已经部署了10,000行Python代码作为系统的一部分。

有人可以用正确的方法,模块等帮助我吗?

修改

流程A是程序中的一个程序。我正在考虑的Pusedo代码是这样的

def processA(list):
   while 1:
      parse file 
      do something

def run():
   list = generate list from run sql query
   processA(list)


if __name__=="__main__":
   run()

4 个答案:

答案 0 :(得分:0)

再次查询数据库以查找自上次查询以来出现的所有新数据是否有意义?像key > highest_key_in_listdate > highest_date_in_list之类的东西,而不是再次加载整个东西。

答案 1 :(得分:0)

这感觉很大,但在初始查询中创建一个临时表来保存结果。向该表添加一个列,该列是一个递增的数字,我将调用id。向表中添加一个触发器,其中包含更新临时表的数据。使用数据库检查并仅查询id大于初始拉取中最后一个元素的记录。由于这将是一个更快的查询,它应该让你尽可能接近实时。重用持久连接也可能有所帮助。

我还会检查您的数据库是否已为此查询编制好索引,2-4秒似乎很长一段时间。也许你也可以稍微优化你的查询。

答案 2 :(得分:0)

很抱歉,很难推断出你想要完成的

有一点不太清楚:
是否要运行进程(python脚本?)

  • 连续(类似守护进程), - 在这种情况下,如果数据集相对较小,则无需将数据集存储在任何位置。你可以把它留在记忆中。
  • 定期(cron job), - 在这种情况下,你需要一种在每次调用之间序列化数据的方法。您可以使用 pickle ,但是我不确定unpickling是否会比从数据库中检索整个数据集花费更少的时间。

重置取决于您的数据库架构以及添加/更新数据的方式。它插入后是否会发生变异?如果没有,您只能通过使用表中的时间戳字段(如果有)或身份字段(实际上不可靠)来选择“自上次调用以来”数据。它是排序可靠的MySQL,但后来,不完全)。

如果数据可能会更新,那么您将不得不重新读取整个数据集(除非您有办法只选择新的/更新的条目)。

至于2-4秒, - 可能有很多原因需要花时间, - 你在运行查询,提到未编入索引的字段吗?

答案 3 :(得分:0)

如果要将数据添加到程序中的表中,只需将其同时添加到列表中即可。

如果要向表中添加多个源,请在表中查询主键为>的所有记录。你检索的最后一把钥匙。