【问题标题】:NoSQL for a Rails Engine on MySQL, PostgreSQL, or SQLite3用于 MySQL、PostgreSQL 或 SQLite3 上 Rails 引擎的 NoSQL
【发布时间】:2016-09-11 15:12:22
【问题描述】:

我正在编写一个 Rails 引擎来销售您自己网站上的活动门票。我正在实施门票折扣。我们将有很多潜在的折扣:

  • 所有门票 10% 折扣
  • 购买 x 票或更多票可享受 10% 的折扣
  • 买x送一
  • 购买减 5 美元
  • 购买 x 票或更多票可减 $5

我有一个折扣表,对于正在进行的每种折扣,我需要存储多种属性。我想我一般都喜欢回避 STI,因为我们正在进行的折扣种类繁多,而且在处理类似类型的折扣时很容易混淆数据。

我希望在 postgresql 中有一个使用 hstore 的属性列。但我还必须提供对 MySQL 和 SQLite 的支持。是否有一些简单的跨数据库兼容方法可以在任何给定的 SQL 数据库中存储类似 NoSQL 的数据?我应该用 Ruby 序列化所有内容吗? (我不会经常需要针对该列中的特定属性运行查询。)

【问题讨论】:

  • 可能类似于serialization?
  • 我提到了这一点,但是在表上进行查询几乎是不可能的,而如果我在 MySQL 中手动执行某项操作则只是“困难”,或者使用 HStore 完全“容易”。我不想失去 Postgres 为使用它的人带来的好处。

标签: ruby-on-rails database-design nosql gem


【解决方案1】:

为了支持所有这些数据库,您需要将数据直接序列化为 JSON,并且可能构建您自己的模拟索引的表。

如果您只能支持一个 DB,我会使用 PostgreSQL,因为它提供了一些在这里有用的 NoSQL 功能,包括将 JSON 存储为一种数据类型,以及在列中对 JSON 元素进行索引。您还可以将数组存储为一种数据类型,同样使用数组元素的索引或哈希(hstore 功能)。

Rails 3 和 Django(1.8 之前)通过 gems/packages 支持这种高级功能。

Rails 4 和 Django 1.8+ 直接支持其中一些功能,包括 Django 1.9 中的 JSON fields

【讨论】:

    猜你喜欢
    • 2011-10-06
    • 2019-12-12
    • 2014-07-30
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多