【问题标题】:Should I Store JSON In active record for my Rails Application我应该将 JSON 存储在我的 Rails 应用程序的活动记录中吗
【发布时间】:2013-12-01 12:16:58
【问题描述】:

我正在使用 ruby​​ on rails 开发赛马应用程序。简而言之,我收到赛马图表的文本文件并将它们导入我的应用程序。该应用程序旨在为用户提供一种查看赛车图表的简便方法,并提供各种统计见解和过滤。我已经为众多数据领域开发了一个漂亮的下降数据模型,应该解决应用程序的静态和过滤方面。然而,当谈到允许用户轻松查看图表时,我对我的解决方案并不满意。目前我必须获取所有不同的数据字段并创建一个图表对象。这对我来说似乎非常低效。或者,我可以在导入时创建一个 JSON 图表对象,然后将序列化对象存储在活动记录中。通常,用户将一次请求多个图表对象,因此速度很重要。 Here's a Link TO Sample Chart。如您所见,这是一个非常复杂的数据结构。

我只在 Rails 开发领域工作了几年,目前这只是一种爱好,所以我希望从一些更有经验的 Rails 开发人员那里获得一些意见。这里有几个问题:

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

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

  3. 是否有任何宝石可以让这项任务变得更容易。

  4. 如果我打算学习这门课程,在数据存储上使用其他(即 Postgres、MySQL、MongoDB)是否有意义。

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

【问题讨论】:

  • 我一直在使用带有 hstore 列的 Postgres,它可以很好地存储任意属性。可能值得研究。
  • PostgreSQL 9.3(我认为)支持原生 JSON 数据类型,这将使​​在 db 级别上使用它更容易(如果您以后希望查询 JSON)。另一种方法是缓存图表,并预先呈现它们。

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


【解决方案1】:

JSON 是YAML 的子集,所以以:https://www.google.com/search?q=rails+store+yaml+in+blob 开头

任意长度的数据库字符串可以是 TEXT 或 BLOB,后者更容易在 Google 上搜索!如果您将文本字段放入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),测试会帮助你。

【讨论】:

  • 从 Stack Overflow 的答案链接 Google 搜索很有趣,并且一段时间后,问题本身成为该搜索的首要结果。
  • Google 跟踪 RSS 提要,以帮助其即时重新排名。希望我们现在可以开始robot.txt-ing 过时和版本 0.9 回答任何十年。然而,这种机制确实使内容保持新鲜
猜你喜欢
  • 1970-01-01
  • 2010-11-10
  • 2011-06-23
  • 2015-08-26
  • 1970-01-01
  • 2014-10-21
  • 2013-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多