【发布时间】:2016-12-21 18:13:36
【问题描述】:
这个问题更多的是关于架构和库,而不是实现。
我目前在项目中工作,该项目需要客户端的本地长期缓存存储(每天更新一次)与服务器上的远程数据库保持同步。对于客户端,选择 sqlite 作为轻量级方法,选择 postgresql 作为服务器端功能丰富的数据库。 postgres 的本机复制机制是不可选择的,因为我需要保持客户端真正轻量级,并且不依赖数据库服务器等外部组件。
实现语言是 Python。现在我正在研究像 SQLAlchemy 这样的 ORM,但以前没有使用过。
- SQLAlchemy 是否有任何工具可以使 sqlite 和 postgres 数据库保持同步?
- 如果没有,是否还有其他具有此类工具的 Python 库?
- 如果必须“手动”解决任务,您对架构应该是什么样子有任何想法?
添加: 这就像遥测,因为客户端每天只能连接大约 20 分钟的互联网
所以,主要问题是关于这样一个系统的架构
【问题讨论】:
-
这个问题太宽泛了。
-
附注。如果您的餐桌上有权衡的地方,您可以查看 CouchDB,它宣传为离线优先数据库(虽然是文档,但不是关系数据库)。或者至少在他们的文档中寻找关于eventual consistency 的想法(并可能通过关系数据库实现它)。根据我的经验,它过于限制和不方便,但您的里程可能会有所不同。
-
这是单向复制还是双向复制?即客户端上的数据库是只读的吗?如果只是在客户端更新数据库,那就简单多了。没有碰撞。如果是客户端和服务器都对数据库进行修改,您可以对每个客户端的数据进行分区吗?我问这个的原因是看看是否有办法避免冲突,其中 2 个客户端离线更新同一行然后都上传 - 你将如何协调
-
@YounElan 是的,复制是双向的,因此可能发生冲突。现在我正在考虑通过将我的数据库设计为一个包含所有事务列表和物化视图的表来解决这个问题
标签: python database sqlite architecture sqlalchemy