我使用Redis作为nosql数据库(并真正享受它),但有些情况下它不是更方便(我知道不是每个数据模型都可以与nosql一起使用,但仍然是...)。
我想知道是否有合适的方法在Redis中执行以下操作,或者我确实需要改为使用RDMS。用nosql重复信息?
比方说,我有2个OBJETS:
- User
- Asset
的资产可以是一个“平”,一个“建筑”或“家”。
我使用名为“资产”一Redis的列表收集的资产,如:
assets = [asset:1, asset:2, ....]
每个资产的哈希,如:
asset:1 = {type: flat, value: 150000$}
我怎样才能得到所有的资产清单类型“平”的?
最简单的方法是迭代资产列表并检查每个资产的类型,这是线性的,因此看起来相当不错。
有没有更好的解决方案?
有一个新的列表可能是有用的:“单位”将包含类型为“flat”的资产的引用,但是这个新闻列表会导致开销,因为我们需要确保它是同步的。
flats = [asset:1, asset:5, ...]
但是,这导致数据复制......这是不好的......这仍然是与nosql的方式?
其他建议?
感谢找你吧,就是用NoSQL的,我们看到的开销清楚。关于最后一点,如果我也要为用户使用一个列表,你是否也只使用索引:users = [2,4,9],assets = [1,5]?我没有使用这种方法,但我只是担心用户和资产的关键问题没有很好地分开。 – Luc 2012-02-28 16:00:55
如果我们建立与RDMS相同的索引机制,那么nosql有什么优势呢?我会说,就像Redis在RAM中一样,优势在于可扩展性和性能,但它如此明显? – Luc 2012-02-28 16:09:25
@Luc嗯,密钥的名称可以范围的ID。它是“user”类型的值“1”,因此您知道构建关键用户:1 您的观点对于关系数据库是有效的。有控制论。你有更细粒度的控制。我认为大多数人不得不使用redis来模拟他们的数据,即使他们没有使用它们,所以他们可以看到每个请求实际上会发生什么。 Oracle会隐藏它,redis让你看看它。 – menacingly 2012-02-28 16:15:12