【问题标题】:JSON Data StorageJSON数据存储
【发布时间】:2015-11-17 00:56:44
【问题描述】:

我需要一个每 15 分钟运行一次的服务来生成“最新”的 JSON 供我们的 AJAX 服务使用。我们希望将此 JSON 用于指标分析、图表等所有爵士乐。

每 15 分钟运行一次的原因是 JSON 生成需要长时间运行 - 查询至少需要 45-60 秒才能完成。随着我们应用程序需求的增加,这预计会增加。

编辑:我们从 SQL 数据库中提取所有数据。我们已经建立了一个庞大的关系数据库。在快速、高效的时间内为我们的网络用户获取数据是绝对必要的。因此,动态查询数据库以获取指标所需的所有数据并不令人满意,因为它花费的时间太长。

EDIT 2 数据需要每 15 分钟完全重新生成一次。 JSON 数据需要几乎立即可用。我们不关心后台服务是否需要很长时间,只要它每 15 分钟生成一次我们的 JSON。

问题是我不确定如何存储这个 JSON。将至少生成 30-40 个单独的 JSON 对象并序列化为字符串以进行传输。我不确定应该如何存储这些字符串。此外,这些 30-40 只会随着时间的推移而增加。我们还预设了生成 JSON 的时间段,分别是 1 天、1 周、1 个月、3 个月、6 个月、1 年、2 年。

我考虑过一个平面数据库表,但我讨厌有几十列但只有一行的表(这对我来说似乎不合适)。我想知道是否有可能在服务器上生成某种“data.json”文件,服务会在必要时从中提取数据,但这是否有任何缺点?可以缓存吗? (缓存会破坏这一点)。

还有其他方法吗?专家能否对此给出中肯的意见?

【问题讨论】:

  • 您想存储/操作 json 吗?使用MongoDB
  • 我想这取决于您希望在生成数据后对它做什么。如果它的唯一目的是静态服务,我不明白为什么你应该将它们保存为文件:它快速、简单且可扩展性良好。
  • 这就是我的想法,虽然我只是担心浏览器是否会缓存mydata.json 文件。从我读到的,它没有。基本上我们所做的只是获取 JSON,在客户端解析它并用于我们的度量系统。我关心的是速度和效率。在这一点上,后台服务是否需要 10 秒或 10 分钟才能完成并不重要。需要立即/立即可用的最终 JSON 确实如此。
  • 您可以告诉浏览器是否缓存文件以及文件应在标头中缓存多长时间。您还可以更改文件名以反映内容。
  • 啊,是的!你可以,我完全忘记了$.AJAX({cache:false}) 命令。干杯提醒我。

标签: javascript json ajax database


【解决方案1】:

由于数据将静态提供,而不是动态生成,我建议将它们存储为文本文件。它快速、简单且可扩展。对旧数据进行存档很容易,或者如果您不需要历史记录,您可以直接覆盖旧文件。

为了避免缓存 json 文件,你可以在客户端做它

$.ajax({ cache: false })

或者您可以在提供文件时在标头服务器端执行此操作。您还可以在此处将缓存时间设置为 15 分钟,以最大程度地减少服务器上的负载。如何做到这一点,取决于您使用的技术。

【讨论】:

    【解决方案2】:

    我认为您通过查看其他一些大公司的 API(Tumblr.、Facebook 等),将这个示例作为您数据的唯一来源。

    但我想向您说明,与以 JSON 格式存储数据相比,使用数据库存储数据会更有效。

    在File中存储数据需要你自己创建插件来处理File里面的数据,检测数据是否OK,用户输入是否OK,Data是否匹配,如果匹配,是什么其他数据可以与之相关。那将是为您编码的好时机。另一方面,如果您使用数据库,则只需选择所需的 ROWS 和 COLUMNS,生成返回数据的 JSON 字符串,然后将其作为 JSON 对象返回给客户端。那正是你想要的。

    使用数据库,为您将使用的每个可能的 JSON 对象创建一个表。像这样

    ObjId | ObjName | ObjProperty
    1     | User    | Employee
    2     | User    | Client
    

    这是给您的示例表。完成保存该数据后。您始终可以使用简单的SELECT 语句获取数据

    SELECT * FROM table_name WHERE ObjId = 1
    

    现在,第一行将返回给您。对其进行字符串化,然后将其作为字符串返回给客户端以对其进行处理。

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

    【讨论】:

    • 嗨,对不起,我编辑了我的原始问题以提供更多解释。我觉得我解释得不够清楚。
    猜你喜欢
    • 2020-07-30
    • 2011-08-06
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 2020-03-03
    • 2017-12-24
    • 2014-01-13
    • 2019-05-30
    相关资源
    最近更新 更多