日期:2014-05-18  浏览次数:20369 次

数据并发问题?

大家好啊!我这里有500个并发终端要向控制器提交数据,控制器接受到数据后在把数据写到数据库中,

如何保证数据不丢失且程序性能又不下降?做过的朋友给点经验?多谢!

------解决方案--------------------
在数据表中加一个时间戳字段(
SQL code
DECLARE @s VAR

------解决方案--------------------
控制器接受到数据后在把数据写到数据库中?

那就有服务器自己去控制.

如果是客户端的话,定义好提交的用户就行了.就是在数据库中加个用户字段,各自提交各自的,互不影响.

------解决方案--------------------
插入数据和查询不一样的,加时间戳也是无用的,插入数据事务必然要先锁表,插入数据以后然后解锁,没有同时插入的可能,要想提高性能,要通过软硬方式解决.软件的方式有很多,比如你插入的表最好别建什么索引,建了索引查询快,插入慢.日志写入方式采用simple,别记录大容量日志等。硬件方式就是提高你硬件的访问速度,因为你写入数据,最后影响的还是磁盘的写入速度,就如Oracle大型应用的磁盘调优,一般把经常用的防到Raid0,Raid0+.硬件开销大了,数据库性能提高了。
我的建议是你最好,本机也写文件,别写数据库。这些文件通过其他程序入库,同样也可以做为你的日志,自己也清白。
如果服务器压力还大,就用负载均衡来解决,跟数据库没什么关系。我搞过一个项目,压力大了,Sqlserver不知道什么原因,数据老是丢,所以你通过文件做你的日志我感觉还不错。
以上意见仅供参考。

------解决方案--------------------
数据库有锁机制自动会控释数据的并发性的
------解决方案--------------------
表面上看他们是很多用户在同时工作,但最后只有一个在工作. 因为不能同时有接两个电话或打两个电话了.
------解决方案--------------------
可以按这个意思理解,不要考虑客户机传来的数据直接写库了,频繁写数据库很容易发生问题.我说的这个处理也有个缺点,就是写磁盘的时候,你要保证写磁盘IO不错误,虽然极少情况下会发生磁盘Io错误,但总会发生。
如果你想更快,那么把程序至少分割为两个模块:
(1)定义数据结构,客户机传来的数据报直接放到内存,这算是最快的响应速度了。
(2)写数据库、日志模块,读内存的数据库结构,把数据写入数据库以及日志,释放内存。
------解决方案--------------------
按照短信模式,也是把短信压栈,把发送短信和计费分开的
------解决方案--------------------
类似我上面说的,想解释清楚,结果又弄混了,罪过。
------解决方案--------------------
其实我上面已经说了,你把程序分成多个模块.你只要注意几个问题就可以了,比如写磁盘IO错误怎么办,数据库如果down了怎么办,按你说的,个人不推荐用SqlServer。