将JSON数据存储为MySQL中的Text

时间:2013-07-15 09:36:16

标签: mysql json

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

ID, TIME_STAMP, DATA

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

我发现这种方法非常简单,不容易出错。 JSON对象非常简单,并且没有大量嵌套。

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

3 个答案:

答案 0 :(得分:8)

你可能知道,MySQL是一个关系型数据库管理器。它被设计用于以数据通过密钥相互关联的方式使用,形成关系,然后可以用于产生复杂的数据检索。你的方法在技术上会起作用(而且速度很快),但是如果扩大你的范围的复杂性,可能(基于我到目前为止看到的)会大大削弱你利用你正在使用的技术的可能性!

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

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

答案 1 :(得分:1)

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

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

如果您正在寻找像作业队列这样的东西,并且水平可扩展性不是问题而您只需要快速访问最新版本,则可以使用RedisDB,一个内存中的键值存储,有一个哈希(关联数组)数据类型和列表这种事情。或者,既然你提到HDFS和水平可伸缩性可能是个问题,我建议使用像Apache ActiveMQ或RabbitMQ这样的队列系统。

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

希望有所帮助。

答案 2 :(得分:1)

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

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