nginx负载均衡后,数据库提交后的数据不能读取

2013-05-09 13:32:06 +08:00
 glei
数据库是mysql
用nginx反代了三个端口127.0.0.1:8001 ~ 8003
用户访问网站后在8001提交的数据,然后在8002读取,结果读不到。
数据确实提交到数据库了,是因为不同进程所以读不到?
如果只反代一个端口正常可以读到。
有人知道原因吗。。。
3476 次点击
所在节点    Python
7 条回复
est
2013-05-09 13:49:23 +08:00
代码放出来吧。环境也没说清楚?python的啥框架?啥版本?
glei
2013-05-09 14:08:11 +08:00
原因大概知道了,应该是多个不同的进程操作数据库后,相互数据是不可见的。我现在在查询前先commit一次,就可以取到当前最新的数据了。
大家有什么好的方法吗?
keakon
2013-05-09 14:18:23 +08:00
每个事务在完成之前,其他事务都是不能看到这个事务里的改动的。

所以应该是你写完数据后没提交=。=
gamexg
2013-05-09 14:28:01 +08:00
我的网不稳定?刚刚回复打不开网页了。。。

自己写的程序?
每个请求结束时都必须提交一次事务的(有些框架会帮您做),不然很有可能你会突然发现关掉服务器再重新启动后之前的数据全部丢失了。。。

关于事务可以看看这个。
http://www.taobaodba.com/html/91_mysql_innodb_transaction_isolation_level.html
gamexg
2013-05-09 14:29:08 +08:00
那个地址介绍并不是很详细,这里有个pg数据库的事务介绍
http://www.pgsqldb.org/pgsqldoc-8.1c/transaction-iso.html
glei
2013-05-09 14:35:41 +08:00
@keakon A插入数据的地方确实是commit了,因为是另外一个进程B的connection去读这个数据,所以应该是读了旧的数据,因为当前的这个connection不知道数据有变化。所以只有在查询前先commit一下。
glei
2013-05-09 14:45:55 +08:00
改成
提交读(Read Committed):只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别
应该就可以了。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/68260

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX