论坛首页 Java企业应用论坛

如何能在多个web服务器1个DB的情况下保证数据唯一?

浏览 15603 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2009-08-11  
nwangwei 写道
1.针对这两个字段做唯一索引;
2.然后web服务器上直接插入,抓特定的Exception判断是不是违反了唯一性。

这个...我看行...
0 请登录后投票
   发表时间:2009-08-11  
lixjluck 写道
treblesoftware 写道
zelsa 写道
把save交给一台机器处理,然后暴露API给其他机器使用


如果这样子,是不是有些浪费了,而且SAVA请求过多,是不是会网络堵塞,有更好的解决方案吗。

交给一台机器也有并发的问题吧

是否考虑使用MQ的queue,所有的web发送到mq上,有一个消费者消费这些数据

这种方式有几个问题:
1、异步,不知业务允许
2、消费稍微有些慢


ps. 为什么是会员设置的数据,但是这个表有不和userId有关联。


这个是基础业务数据, 是使用者自己录入然后在上面做业务的, 是大家共享的基础数据, 所以不和userid挂钩
0 请登录后投票
   发表时间:2009-08-11   最后修改:2009-08-11
by5739 写道
lixjluck 写道
treblesoftware 写道
zelsa 写道
把save交给一台机器处理,然后暴露API给其他机器使用


如果这样子,是不是有些浪费了,而且SAVA请求过多,是不是会网络堵塞,有更好的解决方案吗。

交给一台机器也有并发的问题吧

是否考虑使用MQ的queue,所有的web发送到mq上,有一个消费者消费这些数据

这种方式有几个问题:
1、异步,不知业务允许
2、消费稍微有些慢


ps. 为什么是会员设置的数据,但是这个表有不和userId有关联。


这个是基础业务数据, 是使用者自己录入然后在上面做业务的, 是大家共享的基础数据, 所以不和userid挂钩



有什么浪费的,这样的系统本来就该用这种模式。如果save的压力过大,异步MQ是应该考虑的,数据库的能力终究是有瓶颈的,用一个集中的AppServer来处理具有更好的系统伸缩性。

0 请登录后投票
   发表时间:2009-08-17  
乐观锁可以解决这个问题。还有另外一种思路,就是在app server之间共享一个锁,设置一个对所有app server起作用的写锁,这个需要用一些工具,如terracotta。这样的好处是你可以不用考虑你的app 最终部署到多少台机器上,需要部署多个实例时,只需要通过简单的配置就可以保证多server并发读写的正确性。
1 请登录后投票
   发表时间:2009-08-17  
其实你们公司的做法就可以解决你提出的问题了....
在保存之前就已经查询了表里有没有相同的记录....
就算2台web服务器同时提交,在DB操作save方法的时候都会有先后顺序,
后一个save操作的时候查询的时候就有了相同的记录...就不会在save
不必要想的那么复杂.
0 请登录后投票
   发表时间:2009-08-17  
不就是一个简单的分布式嘛!save等操作放到统一服务器上,其他的调用就是你,哪有那么复杂的啊!
0 请登录后投票
   发表时间:2009-08-18  
很简单的告诉楼主,使用集群式(负载均衡)就完全不用考虑上述情况了。建议楼主多看点构架方面的书籍...
0 请登录后投票
   发表时间:2009-08-18  
对,这是一个集群问题,数据软件架构要解决的问题,我认为最好方案是ejb
0 请登录后投票
   发表时间:2009-08-18  
这个是属于典型的数据库封锁和并行性的问题。

你们这个在应用上解决的方案,从这可以看出你们这个团队没有人懂数据库。

如果你不想深入研究数据库锁知识,你可以看看的hibernate的锁机制。会对你有帮助。
0 请登录后投票
   发表时间:2009-08-19   最后修改:2009-08-19
对的, 我现在只会1web服务器1db的情况, 我很想学构架方面, 但是没找到合适的书籍, 上面兄弟有没有好的架构方面的书籍推荐? 不胜感激.....
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics