一点背景.
非常大的单片Django应用程序.所有组件都使用相同的数据库.我们需要分离服务,以便我们可以独立升级系统的某些部分而不影响其余部分.
我们使用RabbitMQ作为Celery的经纪人.
现在我们有两个选择:
我的团队倾向于HTTP,因为这是他们熟悉的,但我认为使用RPC而不是AMQP的优势远大于它.
AMQP为我们提供了轻松添加负载平衡和高可用性以及保证消息传递的功能.
而使用HTTP我们必须创建客户端HTTP包装器以使用REST接口,我们必须放入负载平衡器并设置该基础结构以便具有HA等.
使用AMQP,我可以生成另一个服务实例,它将连接到与其他实例相同的队列以及bam,HA和负载平衡.
我对AMQP的看法是否遗漏了什么?
我有一张桌子说:
CREATE TABLE "DataNode" (
"ID" NUMBER(7,0),
"TYPE" NUMBER(7,0),
"NAME" VARCHAR2(100),
"STATUS" NUMBER(7,0),
"REVISION" NUMBER(4,0),
"MODIFIEDAT" DATE
);
CREATE TABLE "DataNode_Revisions" (
"ID" NUMBER(7,0),
"NODEID" NUMBER(7,0),
"TYPE" NUMBER(7,0),
"NAME" VARCHAR2(100),
"STATUS" NUMBER(7,0),
"REVISION" NUMBER(4,0),
"MODIFIEDAT" DATE
) COMPRESS;
Run Code Online (Sandbox Code Playgroud)
所以我有这两张桌子.我从"DataNode"读取所有内容,当发生更改时,我将当前条目写入"DataNode_Revisions",然后修改现有的"DataNode"记录.说得通?
这是最好的方式吗?我已经可以告诉我,当Schema改变时我会遇到问题.我没有看到更好的选择,但如果有,请告诉我!我假设将这一切保留在一个表中会导致大量的性能损失吗?我的意思是,我的记录数量会增加四倍,并且已经有很多.我认为Drupal存储了这样的节点修订版,我很好奇它们如何不会遇到性能问题.
许多用户经常阅读"DataNode".但是,很少有写入."DataNode_Revisions"仅在有时读取.我只是担心要保留这么多表."DataNode"是与此非常相似的~25个表中的一个.
我试图找出如何锁定整个表格在Postgres中编写,但它似乎没有工作,所以我假设我做错了什么.
例如,表名是"用户".
LOCK TABLE用户处于EXCLUSIVE MODE;
当我检查视图pg_locks时,它似乎不在那里.我尝试过其他锁定模式也无济于事.
其他事务也能够执行LOCK功能,并且不会像我想象的那样阻塞.
在psql工具(8.1)中,我只需返回LOCK TABLE.
任何帮助都会很精彩.