我应该在我的Rails应用程序的活动记录中存储JSON

时间:2013-12-01 12:16:58

标签: ruby-on-rails json ruby-on-rails-3

我正在铁轨上的红宝石上进行赛马应用。在坚果壳中,我收到赛马图表的文本文件并将其导入我的应用程序。该应用程序旨在为用户提供一种简单的方法来查看比赛图表,并提供各种统计见解和过滤。我已经为众多数据领域开发了一个漂亮的下降数据模型,它应该解决应用程序的静态和过滤方面问题。但是,当允许用户轻松查看图表时,我对我的解决方案不满意。目前,我必须采取所有各种数据领域并创建图表对象。这对我来说似乎效率很低。或者,我可以在导入时创建JSON图表对象,然后将序列化对象存储在活动记录中。通常,用户将一次请求多个图表对象,因此速度很重要。 Here's a Link TO Sample Chart。如您所见,这是一个非常复杂的数据结构。

我在轨道开发方面只做了几年而且这只是一个业余爱好,所以我希望得到一些更有经验的铁路开发人员的一些意见。以下是几个问题:

  1. 我建议采用一种常见的方法解决我的问题,还是有更好的方法来解决这个问题。

  2. 假设该方法具有优点,那么创建JSON对象的最佳/正确方法是什么。我尝试创建对象的哈希,然后使用to_json,但结果看起来根本不像JSON。

  3. 是否有任何宝石可以让这项工作更轻松。

  4. 如果我打算继续学习这门课程,那么在数据存储上使用它是有意义的(即Postgres,MySQL,MongoDB)。

  5. 我感谢任何人愿意分享的任何建议,智慧或建议。

1 个答案:

答案 0 :(得分:3)

JSON是YAML的子集,因此请从:https://www.google.com/search?q=rails+store+yaml+in+blob

开始

任意长度的数据库字符串都是TEXT或BLOB,而后者更容易谷歌!如果将文本字段放入ActiveRecord::Base.serialize,Rails会自动将哈希值编码为YAML进入数据库,并将其解码回哈希值。

PostgreSQL是一个技术上优越的数据库。如果刚刚开始使用MySQL,因为PostgreSQL从Oracle DDBMS中学到了所有关于用户友好性的知识。您可以轻松地在MySQL中序列化为BLOB。但序列化到PostgreSQL hstore的重点是查询。

数据库SELECT语句的WHERE子句不能总是读取所有BLOB或TEXT。有些系统只读取前256个字符。并且字符将包含JSON / YAML标记和转义,因此您无法轻松查询复杂文本。但是PostgreSQL SELECT语句知道hstore字段包含JSON,并且它们支持一种特殊的符号来通过它们的键和值来查询它们。

您可能不需要查询JSON中的任何内容。这让我想到了最后一点:即使您只是在做一个学习者项目,也要编写大量自动化测试。这些决定都没有一成不变,所以写下现在正常工作,保持干净,保持测试通过,以及升级时间(例如从MySQL迁移到PostgreSQL),测试将帮助你。