首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
V2EX  ›  Python

求问项目间同步数据的解决方案

  •  
  •   leisurelylicht · 49 天前 · 851 次点击
    这是一个创建于 49 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我现在有两个项目 A 和 B。都是 django+psgresql 结构的。

    A 项目的主要功能是定时去查询数据并保存到本地。B 的主要功能是从各种其他项目中获取数据并保存,做关联展示的。

    现在需要让 A 每次查询完数据后能把所有的数据都更新到 B 项目中。

    我自己想了两种方案。

    1. 是 B 项目出一个 post 的创建记录的接口,A 项目每次查询结束后访问 B 的接口把数据都吐给 B。 F49bQI.png
    2. A 项目出一个获取所有数据的接口,B 项目出一个启动异步更新任务的接口。然后每次 A 查询结束后访问一下 B 的启动任务的接口,让 B 中启动一个异步任务去访问 A 的接口拉取数据。 F49qyt.png

    但是两种方案从安全认证,稳定性,可靠性和设计实现等方面讲我觉得都有点蠢。

    也有想过用 django orm 连接两个数据库。但是觉得会提高耦合度。

    想问下这种情况有没有什么成熟的解决方案?

    第一次设计这种分散的系统没什么经验。

    4 回复  |  直到 2019-01-01 23:29:04 +08:00
        1
    sagaxu   49 天前 via Android
    1. 直接读库,成本最低,scale 最差。
    2. A 提供查询接口,普通青年的选择。
    3. B 提供一个 mq,A 把 CUD 作为 event 入队。
    4. CQRS,成本最高,scale 最好。
        2
    loveCoding   48 天前
    用过消息队列吗?
        3
    leisurelylicht   47 天前
    @sagaxu 多谢,我大概看懂了。有个小问题想问下 scale 和 CUD 在具体是什么意思?


    @loveCoding 就是 mq 吧,用法应该就像 sagaxu 的第 3 方案吧。
        4
    loveCoding   47 天前
    @leisurelylicht 根据你的实际情况选最简单有效的方案实现,不要盲目追求架构引入不必要的复杂性.无论是采用什么方案来实现业务处理的代码是一样的,B 只对上层暴露一个处理业务的函数 ,区别只是接收消息的方式不同 .
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3901 人在线   最高记录 4346   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 16ms · UTC 05:46 · PVG 13:46 · LAX 21:46 · JFK 00:46
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1