【问题标题】:Store JSON data as Text in MySQL在 MySQL 中将 JSON 数据存储为文本
【发布时间】:2013-07-13 03:05:12
【问题描述】:

这更像是一个概念/数据库架构相关的问题。为了保持数据一致性,而不是 NoSQL 数据存储,我只是将 JSON 对象存储为 MySQL 中的字符串/文本。所以一个 MySQL 行看起来像这样

ID, TIME_STAMP, DATA

我会将 JSON 数据存储在 DATA 字段中。我不会更新任何行,而是添加带有当前时间戳的新行。因此,当我想要最新数据时,我只需获取具有 max(timestamp) 的行。我将 Tornado 与 Python MySQLDB 驱动程序一起用作我的主要后端应用程序。

我发现这种方法非常直截了当,不易出错。 JSON 对象相当简单,没有大量嵌套。

这种方法从根本上是错误的吗?在 MySQL 中将 JSON 数据存储为文本是否有任何问题,或者我应该使用基于文件系统的存储,例如 HDFS。请告诉我。

【问题讨论】:

  • 只要不用在数据中搜索就可以了
  • 我推荐你试试“Redis”数据库。我已经使用它来管理像您的示例这样的数据,而且它非常易于使用。
  • 没关系,但是如果 JSON 很大并且不是太多,你可以考虑使用文件系统。如果您有很多记录,请考虑使用 NoSQL 解决方案。
  • 谢谢大家,我会研究 Redis。但是,我不会丢失一个字节的数据,这一点非常重要。

标签: mysql json


【解决方案1】:

您可能知道,MySQL 是一个关系数据库管理器。它被设计用于数据通过键相互关联的方式,形成关系,然后可用于产生复杂的数据检索。您的方法在技术上会起作用(并且速度非常快),但如果您扩大范围的复杂性,可能会(根据我目前所见)大大削弱您利用所使用技术的可能性!

我建议您使用像 Redis 或 MongoDB 这样的数据库,因为它们是为文档存储而不是关系架构而设计的。

也就是说,如果您发现该方法适用于您正在构建的内容,那就继续吧。如果您想为您的解决方案增加复杂性,您可能会遇到一些障碍,但无论哪种方式,您都会学到一些新东西!祝你好运!

【讨论】:

  • 谢谢菲尔。我只是希望范围不会变得复杂:)
  • 如果您觉得答案有帮助,请随时点赞。上下投票是使这个网站很棒的重要组成部分!
  • 另外请记住,传统的大型关系数据库管理系统(Oracle、MySQL、MSSQL 等)投入的工时要多一个数量级,而且间歇性数据丢失等问题很少是原因软件,但通常更容易归因于配置不当。
  • @Phil :绝对是我的第一段+1。
【解决方案2】:

Pradeeb,为了帮助回答您需要分析您的用例的问题。您要存储什么样的数据?对我来说,这将是决定性因素:每种技术都有其擅长的特定用例。

我认为假设您使用 JSON 是安全的,因为与传统的关系数据库相比,您的数据结构需要非常灵活的文档。 Phil 指出,某些数据存储本身就支持此类数据结构,例如 MongoDB(他们称之为“二进制 JSON”或BSON)。这将为您提供改进的存储和/或改进的搜索功能。同样,该实用程序完全取决于您的用例。

如果您正在寻找类似作业队列的东西,并且水平可扩展性不是问题,并且您只需要快速访问最新的,您可以使用 RedisDB,一个内存中的键值存储,它具有哈希(关联数组)数据类型和此类事物的列表。或者,由于您提到 HDFS 和水平可扩展性很可能是一个问题,我可以推荐使用 Apache ActiveMQ 或 RabbitMQ 等队列系统。

最后,如果您大量编写,并且您不受客户端限制,但您的数据存储是您的瓶颈:请查看分布式、灵活模式的数据存储,如 HBase 或 Cassandra。它们提供灵活的数据模式,经过大量写入优化,并且可以附加数据并按时间顺序保持,因此您可以高效地获取最新数据。

希望对您有所帮助。

【讨论】:

  • 谢谢。我以前用过 Mongo,但写一致性是 Mongo 的一个问题,人们丢失了数据。
【解决方案3】:

这不是问题。您还可以在现代 MySQL 中使用 memcached 存储引擎,这将是完美的。虽然我从未尝试过。

另一种方法是使用 memcached 作为缓存。将所有内容写入 memcached 和 mysql。当你去读取数据时,尝试从 memcached 读取。如果不存在,则从 mysql 中读取。这是减少数据库瓶颈的常用技术。

【讨论】:

    猜你喜欢
    • 2012-05-06
    • 2018-11-26
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 2010-10-17
    • 2017-05-03
    • 1970-01-01
    相关资源
    最近更新 更多