哪种数据加载方法最适合性能?

时间:2012-09-12 18:54:40

标签: python database python-3.x redis

例如,我将对象 user 存储在数据库中(Redis) 它有几个领域:

  • 字符串 昵称
  • 字符串 密码
  • 字符串 电子邮件
  • 列表 帖子
  • 列表 评论
  • 设置 关注者
  • 等......

在Python程序中,我有类( User ),该对象具有相同的字段。此类的实例映射到数据库中的对象。问题是如何从数据库中获取数据以获得最佳性能:

  1. 在实例创建和初始化字段时为每个字段加载值。
  2. 每次在字段值请求时加载字段值。
  3. 作为第二个但是在值加载之后用加载的值替换字段属性。
  4. P.S。 redis在localhost中运行

1 个答案:

答案 0 :(得分:2)

该方法完全取决于要求。

如果只有一个客户端读取和修改属性,这是一个相当简单的问题。修改数据时,只需更改当前Python程序中的实例属性,同时保持数据库同步,同时保持程序的响应。为此,您应该将阻塞调用外包给另一个线程或使用greenlet。如果只有一个客户端,则无需在每次值查找时从DB中获取属性。

如果有多个客户端读取数据且只有一个客户端修改数据,则必须考虑所需的同步级别。如果需要100%同步,则必须在每次值查找时从数据库中获取数据。

如果有多个客户端更改数据库中的数据,您最好先查看坚如磐石的行业标准解决方案,而不是编写自己的数据库缓存/映射器。

你对(2)和(3)的区分并没有多大意义。如果您在每次查找时获取数据,则无需“存储”数据。你看,如果涉及多个客户,这些事情会很快变得非常复杂,而且很难做到正确。