gpt4 book ai didi

身份映射模式的 Ruby 实现

转载 作者:太空宇宙 更新时间:2023-11-03 16:25:32 25 4
gpt4 key购买 nike

我计划实现 identity map对于不使用任何 ORM 工具的小项目。

在我见过的大多数示例中,标准实现只是通过对象 ID 进行散列,但很明显散列会无限增长。我正在考虑使用缓存过期的 memcahed 或 redis,但这也意味着某些对象将在缓存中过期并且它们的数据将再次从数据库中的新对象和不同对象(不同对象下的同一实体)下获取一次内存)。

考虑到大多数 ORM 不需要运行的 memcached/redis。他们如何解决这个问题?他们真的解决了吗?由重复实例表示的实体不是问题吗?

我所知道的唯一解决方案是使用支持智能指针并在散列中存储弱引用的语言。在我看来,Ruby 无法采用这种方法,所以我想知道这种模式通常是如何由 Ruby ORM 实现的。

最佳答案

我认为他们确实使用了哈希,DataMapper 显然使用了 hash。 .我的假设是身份映射是每个“ session ”,可能在每次请求后刷新(也确保事务在请求边界结束时刷新)。因此它可以无限制地增长,但有一个固定的范围可以清除它。如果打算让 session 持续更长时间并且需要定期清洁,那么 WeakRef可能有用。但是,我对长时间维护身份映射持谨慎态度,特别是在涉及并发性并且对一致的事务更改有任何期望的情况下。我知道 ActiveRecord 考虑过添加一个 IdentityMap 然后放弃了那个努力。根据获取行的方式,可能会出现重复,但可能比您想象的要少,或者应该重新考虑查询。

关于身份映射模式的 Ruby 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25220302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com