【问题标题】:How To Store Query Results (Using Python)如何存储查询结果(使用 Python)
【发布时间】:2017-12-15 15:27:29
【问题描述】:

背景:

我有一个用Python 编写的应用程序来监控工具的状态。这些工具从特定的运行中发送它们的数据,所有这些数据都以 JSON 文件的形式存储在 Oracle 数据库中。

我的问题/解决方案:

当我想将当前运行数据与之前运行的数据进行比较时,我不想连接到数据库然后重复查询它,而是要复制数据库查询,以便我可以将新的运行数据与复制我所做的而不是查询结果。 我想这样做的原因是因为不断查询服务器以获取上一次运行的数据很慢,并且会给服务器带来不必要的负载/使用。

对于上一次运行的数据,有多个文件与之关联(因为有多个工具),因此每个查询都有多个需要复制的文件。在本地存储查询中的文件副本是我打算做的,但我想知道最好的方法是什么,因为我是相对论新手来做这样的事情。

  • 因此,对于如何有效存储多个 JSON 文件的查询结果的任何帮助和建议,我们将不胜感激!

【问题讨论】:

  • 为什么你不 md5 数据,只是比较新的 md5 和旧的哈希
  • @mbieren 当我说比较时,我的意思是我希望能够从中提取值,然后进行比较。我将使用以前的数据和新数据进行数据分析。根据您的评论,我假设您打算对其进行哈希比较以查看它们是否相同,这不是我想要做的。对不起,我的帖子的原始措辞有任何混淆。如果我对您的意思的假设有误,请纠正我。谢谢。
  • 我认为效率很大程度上取决于数据量以及值如何存储在数据库中。数据是存储在 varchar2(4000 或 32767)还是 CLOB 中?
  • 您使用哪个 Oracle 数据库版本? Oracle 在 12c 中添加了 JSON 功能。使用新功能时,您对以前数据的查询应该会执行得非常好。
  • 这也是我的猜测。将它们本地存储在 TmpFile 上不会快得多。除了空间问题

标签: python json database oracle


【解决方案1】:

正如您所描述的,查询数据库太多次不是一种选择。好的,在这种情况下,我会这样做:

当您的程序启动时,您会以每个工具的一组 JSON 文件的形式获取所有工具的数据,对吗?好的。我不确定您是如何通过直接查询工具或通过查询 db 来获取数据的 .. 没关系。

您检查该工具的“缓存字典”中是否有旧数据。如果是,请进行比较并将“新数据”作为“以前的数据”存储在缓存中。准备下一次运行。对所有工具执行此操作。这永远循环:-)

这个“缓存字典”现在可以在内存或磁盘上实现。对于您的数据量,我认为内存还可以。

使用这种方法,您不必在数据库中查询旧数据。如果您在程序启动时“缓存”中没有旧数据,则无法进行比较的情况可以处理,您尝试从 db 获取它(冒着较长的查询时间但该怎么办:-)

【讨论】:

  • 非常感谢您的回答!我从数据库中获取所有数据。这些工具有自己的方式将他们的数据上传到我不直接与之交互的数据库,我只是从工具中获取数据库中的数据。我是数据库交互的新手,所以我仍在尝试学习一些零碎的东西。在您看来,查询数据库和创建“缓存字典”的最简单(但有效)的方法之一是什么?或者在我没有旧数据的情况下,从数据库中获取数据并创建“缓存”的最佳方法是什么?
  • DB 与 python 的交互并不是什么大事stackoverflow.com/questions/3521692/…。对于从 oracle 读取 json 数据,我很确定您可以将文件作为字符串读取,然后使用标准方法创建一个字典,例如 obj = json.loads(json_string),其中 json 字符串来自您的选择。
猜你喜欢
  • 2021-10-11
  • 2022-07-26
  • 1970-01-01
  • 2012-07-27
  • 1970-01-01
  • 1970-01-01
  • 2020-07-27
  • 1970-01-01
  • 2018-04-29
相关资源
最近更新 更多