使用NoSQL存储的ORM的不良做法?

时间:2013-12-28 12:07:12

标签: python orm nosql redis key-value-store

我在我的Python平台中使用Redis(redis-py)。最近有人建议我切换到ORM。

例如:python-stdnetromredisco

在NoSQL世界中使用ORM被认为是不好的做法吗?

2 个答案:

答案 0 :(得分:4)

最终问题归结为你想在什么层编写代码。

是否要编写在远程数据库中处理数据结构的代码,或者是否要编写使用在这些数据结构之上构建的抽象的更高级代码?您可以将其视为关于关系数据库的类似问题,您想要编写SQL,还是想编写更高级别的代码?

就个人而言,尽管我自己使用rom执行各种任务(我是作者),但我也会在相同的项目中直接操作Redis。

答案 1 :(得分:2)

注释指出ORM中的R用于关系在技术上是正确的。这并不意味着图书馆没有有效的用途和理由来抽象redis。

有一些很棒的库可以与redis连接,感觉对你正在使用的语言更好,更惯用。对于像ohmredis-native_hash这样的ruby库(披露:我写过那个)就是这么做的。对于python,有redisco等工具,肯定还有其他工具。这使得持久化对象变得非常简单,并且使用redis感觉更像ruby-ish或python-ish。

使用即使是最基本的抽象,还有一些好处,比如你可以编写并保存在应用程序中的非常薄的包装器:

  • 切换redis客户端会更容易。也许你永远不会这样做,但如果你这样做,在一个地方(你的包装器)更改你的redis调用比在你使用redis的地方更改它们要简单得多。

  • 如果通过某种抽象方式进行调用,实现扩展所需的内容(如分片或连接池)可能会更容易。

  • 如果有抽象的话,用其他一些键/值存储或数据结构服务器替换redis会更简单。

我不是主张使用对象映射库或构建自己的抽象,只是指出有正当理由的原因。由您来评估您的需求并选择最适合您的方案。直接调用redis也没有错。