【问题标题】:Json vs. SQL RecommendationsJson vs. SQL 推荐
【发布时间】:2011-05-08 17:06:43
【问题描述】:

除了 python 之外,我没有太多的编程经验,我正在开始一个项目,该项目将按城市/国家、日期和时间存储信息。我以前使用过 simplejson,发现它非常有用,尤其是因为使用 python 对 json 数据进行排序是多么容易。

如果我使用 json,我将拥有一个包含 30 个不同键的字典(针对每个城市/国家),然后对于每个国家或城市,我的值将是一个新字典,其中日期作为键,其值将是另一个以时间为键的字典。每个时间键的值将是 10 个不同字典的列表(如果我没有更简洁地说明,我很抱歉)。我计划将这些数据保留几年,数据主要是文本。我不知道会有多少文字,但会有很多文字。数据将每小时更新几次。我将是唯一访问数据的人,我最终可能会将数据放到网上供人们查看。

所以数据结构可能看起来像这样:

data = {
  'Toronto, Canada': {
    '2011-05-04': {
      '00:30': [
        { ... },
        { ... },
        ...
      ],
      '02:00': [
        ...
      ],
      ...
    },
    '2011-05-05': {
    },
    ...
  },
  'Tokyo, Japan': {
    ...
  },
  ...
}

我开始自学 SQL,但有人会推荐什么?我应该创建上面描述的 json 结构(或一些更改的版本,我愿意提供任何建议)还是应该通过 SQL 创建数据库?

我还将使用不同的 python 函数分析数据,所以我不知道这是否会影响任何建议。

【问题讨论】:

  • 您将苹果与橙子进行比较。使用关系数据库来持久化您的数据与在内存中维护字典中的数据并在那里进行分析并不直接相反。请详细说明需要多少数据、如何以及何时需要持久化、多久更改一次、有多少并发用户访问等。

标签: python sql json


【解决方案1】:

JSON 用于在同一台机器或网络上的进程之间交换少量数据。你需要一个数据库。

如果您使用 JSON,则需要先将整个结构读入内存,然后才能对其进行查询或更新。您需要在每次更新后将全部内容写回磁盘(否则可能会在断电时丢失数据)。您会发现使用 SQL 分析数据要比使用 JSON 容易得多。

一些建议:

(1) 使用SQLite(Python自带)

(2) 考虑将城市和国家作为单独的列。考虑添加“州/省”列。

(3) 考虑日期和时间是否应该是一个“时间戳”列。

(4) 除了说它是“10 个字典的列表”之外,您没有提供任何有关实际数据的详细信息。您需要确定(并且可能希望寻求帮助)的事情是:该列表真的是一组吗?如果真的是列表,列表下标是什么意思?是否所有可能的 dict 键都是预先知道的(以及有多少个),或者它们是可变数据?答案将影响您设计表格的方式。

【讨论】:

  • SQLite 不像 simplejson 那样写入磁盘吗?并且 simplejson 对 Shon 的应用程序的性能应该不是问题,即使没有 C 加速它也相当快——它可以在几秒钟内读取和写入包含一百万个对象 (5MB+) 的 JSON 树。不过,我同意使用 SQL 查询进行分析要容易得多
  • @brianpeiris:SQLite 与基于 JSON 的方法不同,它不会将整个数据库读入内存并再次写回。
猜你喜欢
  • 1970-01-01
  • 2012-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-26
相关资源
最近更新 更多