2024-05-18 09:08:49 发布
网友
我在Python平台中使用Redis(redis-py)。最近有人建议我改用ORM。在
{a4}或^ a3}
在NoSQL世界中使用ORMs是否被认为是不好的做法?在
最终问题归结为您想在哪一层编写代码。在
您是要编写在远程数据库中操纵数据结构的代码,还是要编写使用构建在这些数据结构之上的抽象的高级代码?你可以把它看作是一个关于关系数据库的类似问题,就像你想写SQL,还是想写更高级的代码?在
就个人而言,尽管我自己使用rom完成各种任务(我是作者),但我也在同样的项目中直接操作Redis,因为这是有意义的。在
rom
有评论指出,ORM中的R表示关系型,这在技术上是正确的。这并不意味着抽象redis的库没有有效的用途和理由。在
有一些很好的库可以使与redis的接口感觉更好,并且对您所使用的语言更加习惯。对于像ohm或redis-native_hash(披露:我写了这个)这样的ruby库就这样做了。对于python,有类似redisco之类的工具,当然还有其他工具。这使得将对象持久化到redis变得非常简单,并使使用redis感觉更像ruby或python。在
ohm
redis-native_hash
redisco
使用甚至是最基本的抽象,比如可以在应用程序中编写并保存的非常薄的包装器,还可以从中获得更多好处:
交换redis客户端会更容易。也许你永远不会这样做,但是如果你这么做了,在一个地方(你的包装器)改变你对redis的调用要比在你使用redis的任何地方更改它们简单得多。
如果您的调用是通过某种抽象进行的,那么实现扩展所需的东西(如分片或连接池)可能会更容易。
如果存在抽象,那么用其他键/值存储或数据结构服务器替换redis会更简单。
我并不是提倡使用对象映射库或构建自己的抽象,只是指出了为什么要使用对象映射库。由你来评估你的需求,选择最适合你的。直接打给redis也没什么错。在
最终问题归结为您想在哪一层编写代码。在
您是要编写在远程数据库中操纵数据结构的代码,还是要编写使用构建在这些数据结构之上的抽象的高级代码?你可以把它看作是一个关于关系数据库的类似问题,就像你想写SQL,还是想写更高级的代码?在
就个人而言,尽管我自己使用
rom
完成各种任务(我是作者),但我也在同样的项目中直接操作Redis,因为这是有意义的。在有评论指出,ORM中的R表示关系型,这在技术上是正确的。这并不意味着抽象redis的库没有有效的用途和理由。在
有一些很好的库可以使与redis的接口感觉更好,并且对您所使用的语言更加习惯。对于像
ohm
或redis-native_hash
(披露:我写了这个)这样的ruby库就这样做了。对于python,有类似redisco
之类的工具,当然还有其他工具。这使得将对象持久化到redis变得非常简单,并使使用redis感觉更像ruby或python。在使用甚至是最基本的抽象,比如可以在应用程序中编写并保存的非常薄的包装器,还可以从中获得更多好处:
交换redis客户端会更容易。也许你永远不会这样做,但是如果你这么做了,在一个地方(你的包装器)改变你对redis的调用要比在你使用redis的任何地方更改它们简单得多。
如果您的调用是通过某种抽象进行的,那么实现扩展所需的东西(如分片或连接池)可能会更容易。
如果存在抽象,那么用其他键/值存储或数据结构服务器替换redis会更简单。
我并不是提倡使用对象映射库或构建自己的抽象,只是指出了为什么要使用对象映射库。由你来评估你的需求,选择最适合你的。直接打给redis也没什么错。在
相关问题 更多 >
编程相关推荐