欧姆& Redis:何时使用集合、列表或集合?

发布于 2024-10-13 12:32:44 字数 290 浏览 1 评论 0原文

使用 Ohm & 时,集合与集合或列表有什么区别?雷迪斯?

几个 Ohm 示例使用列表而不是集合(请参阅列表文档本身):

class Post < Ohm::Model
  list :comments, Comment
end

class Comment < Ohm::Model
end

选择这种设计的理由是什么?

What is the difference between a collection and a set or list when using Ohm & Redis?

Several of the Ohm examples use a list rather than a collection (see the list doc itself):

class Post < Ohm::Model
  list :comments, Comment
end

class Comment < Ohm::Model
end

What is the rationale for this design choice?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

冬天的雪花 2024-10-20 12:32:44

只是为了扩展 Ariejan 的答案。

  • 列表 - 已排序。类似于 Ruby 中的数组。用于队列和保持项目有序。

  • 集合 - 无序列表。它的行为类似于 Ruby 中的数组,但针对更快的查找进行了优化。

  • 集合 - 与引用结合使用,它提供了一种简单的表示关联的方法。

本质上,集合和引用是处理关联的便捷方法。所以这:

class Post < Ohm::Model
  attribute :title
  attribute :body
  collection :comments, Comment
end

class Comment < Ohm::Model
  attribute :body
  reference :post, Post
end

是以下内容的快捷方式:

class Post < Ohm::Model
  attribute :title
  attribute :body

  def comments
    Comment.find(:post_id => self.id)
  end
end

class Comment < Ohm::Model
  attribute :body
  attribute :post_id
  index :post_id

  def post=(post)
    self.post_id = post.id
  end

  def post
    Post[post_id]
  end
end

为了回答您关于设计选择的基本原理的原始问题 - 引入集合和引用来提供用于表示关联的简单 api。

Just to expand on Ariejan's answer.

  • List - ordered. Similar to an Array in Ruby. Used for queues and keeping items ordered.

  • Set - an unordered list. It behaves similar to an Array in Ruby but is optimized for faster lookups.

  • Collection - used in conjunction with reference, it provides a simple way of representing associations.

In essence, collections and references are convenience methods for dealing with associations. So this:

class Post < Ohm::Model
  attribute :title
  attribute :body
  collection :comments, Comment
end

class Comment < Ohm::Model
  attribute :body
  reference :post, Post
end

is a shortcut for the following:

class Post < Ohm::Model
  attribute :title
  attribute :body

  def comments
    Comment.find(:post_id => self.id)
  end
end

class Comment < Ohm::Model
  attribute :body
  attribute :post_id
  index :post_id

  def post=(post)
    self.post_id = post.id
  end

  def post
    Post[post_id]
  end
end

To answer you original question about the rationale for the design choice - collections and references were introduced to provide a simple api for representing associations.

苏佲洛 2024-10-20 12:32:44

列表 - 元素的有序列表。当您请求整个列表时,您将获得按照您将其放入列表中的方式排序的项目。

集合 - 元素的无序集合。当您请求集合时,项目可能会以随机顺序出现(例如无序)。**

在您的示例中,注释是有序的。

** 我知道随机与无序不同,但它确实说明了这一点。

List - ordered list of elements. When you request the entire list, you get the items ordered the way you put them in the list.

Collection - unordered collection of elements. When you request the collection, items may appear in random order (e.g. unordered).**

In your example, comments are ordered.

** I know that random is not the same as unordered, but it does illustrate the point.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文