例如,我将对象用户存储在数据库(Redis)中,它有几个字段:
- 字符串 缺口
- 字符串 密码
- 字符串 电子邮件
- 列出 帖子
- 列出 评论
- 设置 关注者
- 等等...
在 Python 程序中,我有类(User),该对象具有相同的字段。此类的实例映射到数据库中的对象。问题是如何从数据库中获取数据以获得最佳性能:
- 在实例创建和初始化字段时为每个字段加载值。
- 每次请求字段值时加载字段值。
- 作为第二个,但在加载值之后,用加载的值替换字段属性。
ps redis 在 localhost 中运行
例如,我将对象用户存储在数据库(Redis)中,它有几个字段:
在 Python 程序中,我有类(User),该对象具有相同的字段。此类的实例映射到数据库中的对象。问题是如何从数据库中获取数据以获得最佳性能:
ps redis 在 localhost 中运行
该方法完全取决于要求。
如果只有一个客户端读取和修改属性,这是一个相当简单的问题。修改数据时,只需更改当前 Python 程序中的实例属性,同时保持数据库同步,同时保持程序响应。为此,您应该将阻塞调用外包给另一个线程或使用greenlets。如果只有一个客户端,则绝对不需要在每次查找值时从数据库中获取属性。
如果有多个客户端读取数据而只有一个客户端修改数据,则必须考虑需要哪种级别的同步。如果您需要 100 % 同步,则必须在每次查找值时从数据库中获取数据。
如果有多个客户端更改数据库中的数据,您最好寻找一个坚如磐石的行业标准解决方案,而不是编写自己的数据库缓存/映射器。
您在(2)和(3)之间的区别并没有真正的意义。如果您在每次查找时都获取数据,则无需“存储”数据。你看,如果可能涉及多个客户,这些事情很快就会变得相当复杂,而且很难做到正确。