0

例如,我将对象用户存储在数据库(Redis)中,它有几个字段:

  • 字符串 缺口
  • 字符串 密码
  • 字符串 电子邮件
  • 列出 帖子
  • 列出 评论
  • 设置 关注者
  • 等等...

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

  1. 在实例创建和初始化字段时为每个字段加载值。
  2. 每次请求字段值时加载字段值。
  3. 作为第二个,但在加载值之后,用加载的值替换字段属性。

ps redis 在 localhost 中运行

4

1 回答 1

2

该方法完全取决于要求。

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

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

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

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

于 2012-09-12T19:09:00.500 回答