关于事务处理机制和原理、分布数据库设计架构与原理
今天跟一个大牛讨论上述的原理,下面贴一下聊天记录备忘.
Code
2009-06-05 20:20:14 ⑦零ゞ距离(76159179)
群主做了几年开发了
2009-06-05 20:20:58 杨航(282602809)
好些年了
2009-06-05 20:22:24 ⑦零ゞ距离(76159179)
呵呵,做行业软件还是?
2009-06-05 20:22:45 杨航(282602809)
做男人好些个年了
2009-06-05 20:22:50 ⑦零ゞ距离(76159179)
哈哈
2009-06-05 20:23:18 杨航(282602809)
呵呵
2009-06-05 20:23:51 ⑦零ゞ距离(76159179)
经常做设计不?
2009-06-05 20:24:11 杨航(282602809)
什么设计
2009-06-05 20:24:22 ⑦零ゞ距离(76159179)
架构设计
2009-06-05 20:24:24 杨航(282602809)
哦
2009-06-05 20:24:30 杨航(282602809)
那是得做的
2009-06-05 20:24:50 ⑦零ゞ距离(76159179)
呵呵,有没有什么心得可以交流下
2009-06-05 20:25:08 杨航(282602809)
那得有具体问题
2009-06-05 20:25:18 杨航(282602809)
让我上来就讲,我也不知道说什么啊
2009-06-05 20:26:37 杨航(282602809)
你看看你有什么地方不清楚的,看看我知道不
2009-06-05 20:26:43 杨航(282602809)
哈哈
2009-06-05 20:29:29 杨航(282602809)
上来就真没敢问的
2009-06-05 20:30:24 ⑦零ゞ距离(76159179)
呵呵,我想问一下,你在事务这块是这么处理的
2009-06-05 20:32:09 杨航(282602809)
就是些个需要并行处理的东西用它啊
2009-06-05 20:33:04 杨航(282602809)
比如,转帐
一边+钱,一边-钱,需要同步时
2009-06-05 20:33:08 ⑦零ゞ距离(76159179)
呵呵,我在大批量数据进行插入的时候经常会碰到死锁
2009-06-05 20:33:10 杨航(282602809)
就是需要同步联系的东西
2009-06-05 20:33:26 杨航(282602809)
哦
2009-06-05 20:33:32 ⑦零ゞ距离(76159179)
我发现这个东西是不是需要队列进行等待
2009-06-05 20:33:33 杨航(282602809)
批量时
2009-06-05 20:33:38 杨航(282602809)
就要进行日志核对
2009-06-05 20:33:46 杨航(282602809)
不家事务
2009-06-05 20:33:52 杨航(282602809)
就是先锁表
2009-06-05 20:33:54 杨航(282602809)
在插
2009-06-05 20:33:55 ⑦零ゞ距离(76159179)
比如主从表数据插入更新
2009-06-05 20:34:13 杨航(282602809)
两头插完了后比较缺的部分,在匹配更新
2009-06-05 20:34:27 杨航(282602809)
表数据插如更新?
2009-06-05 20:34:37 杨航(282602809)
msmq
2009-06-05 20:34:42 杨航(282602809)
可以用这个
2009-06-05 20:34:54 杨航(282602809)
msmq里可以在硬盘里存
2009-06-05 20:34:56 ⑦零ゞ距离(76159179)
但是这样会不会影响性能呢
2009-06-05 20:34:59 杨航(282602809)
也是个不错的选择
2009-06-05 20:35:12 杨航(282602809)
你可以用COM+做分布处理
2009-06-05 20:35:25 ⑦零ゞ距离(76159179)
变成一张表一次只能一个人插入数据
2009-06-05 20:35:31 ⑦零ゞ距离(76159179)
其它的人要等
2009-06-05 20:35:34 杨航(282602809)
MSMQ可以调用COM+组件的
2009-06-05 20:35:45 ⑦零ゞ距离(76159179)
回去研究下
2009-06-05 20:35:48 ⑦零ゞ距离(76159179)
知道有这个东西
2009-06-05 20:35:47 杨航(282602809)
你是说这个事啊
2009-06-05 20:35:58 ⑦零ゞ距离(76159179)
com+也在书上见过
2009-06-05 20:36:09 ⑦零ゞ距离(76159179)
但是没有用过,好像不是 太好用
2009-06-05 20:36:13 杨航(282602809)
COM+可以做分布式均衡负载
2009-06-05 20:36:21 杨航(282602809)
application center进行负载
2009-06-05 20:36:38 ⑦零ゞ距离(76159179)
负载的用户最大有多少
2009-06-05 20:37:00 杨航(282602809)
这个是局域网内部多少台机器了
2009-06-05 20:37:15 杨航(282602809)
MSMQ可以根据IP传对象的
2009-06-05 20:37:29 杨航(282602809)
网络之间可以用http传
2009-06-05 20:37:41 杨航(282602809)
可以走内部队列
2009-06-05 20:38:01 ⑦零ゞ距离(76159179)
这样啊
2009-06-05 20:38:04 杨航(282602809)
如果数据量大,你就要考虑分布式数据库了
2009-06-05 20:38:12 ⑦零ゞ距离(76159179)
到时候改造看看
2009-06-05 20:38:22 杨航(282602809)
因为数据库连接是一个瓶颈
2009-06-05 20:38:24 ⑦零ゞ距离(76159179)
我之前做的框架就是有这方面的问题
2009-06-05 20:38:30 ⑦零ゞ距离(76159179)
并发多的时候会出现问题
2009-06-05 20:38:31 ⑦零ゞ距离(76159179)
是啊
2009-06-05 20:38:39 ⑦零ゞ距离(76159179)
数据连接太少了
2009-06-05 20:39:10 杨航(282602809)
关键和你带宽,和数据量以及用户并发都有关
2009-06-05 20:39:36 ⑦零ゞ距离(76159179)
带宽还好了
2009-06-05 20:39:39 杨航(282602809)
它的瓶颈口和 IIS一样
2009-06-05 20:39:47 ⑦零ゞ距离(76159179)
我做的大部分都是内部系统
2009-06-05 20:39:50 杨航(282602809)
哦
2009-06-05 20:40:09 ⑦零ゞ距离(76159179)
分布式的数据库架构要怎么做
2009-06-05 20:40:13 ⑦零ゞ距离(76159179)
大概的模式
2009-06-05 20:40:12 杨航(282602809)
你是没见过满负荷干活的
2009-06-05 20:40:16 ⑦零ゞ距离(76159179)
一直不是很清楚
2009-06-05 20:40:18 ⑦零ゞ距离(76159179)
是啊
2009-06-05 20:40:31 杨航(282602809)
我做过海关的项目,就是满负荷干活的
2009-06-05 20:40:57 杨航(282602809)
这个群里还有个巴特勒船长,也是管理员
2009-06-05 20:41:08 杨航(282602809)
他是和我一起做海关项目的
2009-06-05 20:41:25 ⑦零ゞ距离(76159179)
啊,很想有这个机会
2009-06-05 20:41:45 ⑦零ゞ距离(76159179)
我做的项目很少有满负荷跑得
2009-06-05 20:41:48 杨航(282602809)
海关服务器很多,带宽很足,但报文也能延时半个小时
2009-06-05 20:41:52 杨航(282602809)
有时候一个小时
2009-06-05 20:42:00 ⑦零ゞ距离(76159179)
基本都是很宽松
2009-06-05 20:42:15 ⑦零ゞ距离(76159179)
这个延时是怎么回事
2009-06-05 20:43:02 杨航(282602809)
CPU内存基本都是满的
2009-06-05 20:43:15 杨航(282602809)
16g内存和8核心CPU
2009-06-05 20:43:23 杨航(282602809)
就是业务量大
2009-06-05 20:43:58 杨航(282602809)
大连海关高峰期跑好多报文,每个都有好多逻辑,对数据库操作的
2009-06-05 20:44:00 ⑦零ゞ距离(76159179)
业务量大的时候,你怎么做延时
2009-06-05 20:43:43 ⑦零ゞ距离(76159179)
cpu一般我做的系统就是50%
2009-06-05 20:44:15 杨航(282602809)
恩,那你是没加多线程,所以在50%以下
2009-06-05 20:44:16 ⑦零ゞ距离(76159179)
是对操作进行等待
2009-06-05 20:44:37 ⑦零ゞ距离(76159179)
主要对多线程不是 很了解
2009-06-05 20:44:32 杨航(282602809)
就是msmq里啊
2009-06-05 20:44:52 ⑦零ゞ距离(76159179)
操作员不是 要等死啊
2009-06-05 20:44:58 杨航(282602809)
msmq+com+也有事务性的
2009-06-05 20:45:04 杨航(282602809)
里面也是有所等待的
2009-06-05 20:45:08 ⑦零ゞ距离(76159179)
这个我知道
2009-06-05 20:45:46 杨航(282602809)
数据库的事务操作千万不能过大
2009-06-05 20:45:56 杨航(282602809)
你知道数据库事物的操作原理吗?
2009-06-05 20:46:42 ⑦零ゞ距离(76159179)
很少嵌套事务
2009-06-05 20:46:43 杨航(282602809)
是这样的
2009-06-05 20:46:49 ⑦零ゞ距离(76159179)
不知道事务操作的原理
2009-06-05 20:46:35 ⑦零ゞ距离(76159179)
我一般一个事务里操作的逻辑都比较简单
2009-06-05 20:46:57 杨航(282602809)
事务为了达到同步是这么实现的
2009-06-05 20:47:03 杨航(282602809)
比如银行转帐
2009-06-05 20:47:09 杨航(282602809)
我把钱转给你
2009-06-05 20:47:10 ⑦零ゞ距离(76159179)
上学的时候没有学过
2009-06-05 20:47:14 杨航(282602809)
比如转50元
2009-06-05 20:47:36 ⑦零ゞ距离(76159179)
我只是知道事务是为了保证数据的唯一性和准确性
2009-06-05 20:47:52 ⑦零ゞ距离(76159179)
银行转帐确实是事务的经典案例
2009-06-05 20:48:41 杨航(282602809)
首先是对表,进行加锁,不让别人用
然后执行
我这边 set money=money-50
你那边 set money=money+50
然后解锁
2009-06-05 20:49:07 杨航(282602809)
如果事务中有数据根据的话
2009-06-05 20:49:19 杨航(282602809)
比如在事务里需要select 什么,或insert什么
2009-06-05 20:49:31 杨航(282602809)
都在内存里进行虚操作检查
2009-06-05 20:49:50 杨航(282602809)
然后在加锁进行同步,在解锁
2009-06-05 20:49:55 杨航(282602809)
是为了保证同步
2009-06-05 20:50:10 ⑦零ゞ距离(76159179)
锁定了以后该表是不是不能查询了
2009-06-05 20:50:28 杨航(282602809)
这时,同步的数据select有可能被改变
2009-06-05 20:50:30 ⑦零ゞ距离(76159179)
我记得了如果表被锁定了,查询也不行了
2009-06-05 20:50:34 杨航(282602809)
就造成了脏读数据
2009-06-05 20:50:41 杨航(282602809)
恩
2009-06-05 20:50:45 ⑦零ゞ距离(76159179)
查询的是以前的数据
2009-06-05 20:50:55 杨航(282602809)
看怎么锁
2009-06-05 20:50:59 ⑦零ゞ距离(76159179)
但是如果不能查询肯定是不行的
2009-06-05 20:51:05 杨航(282602809)
有表锁,有字段锁
2009-06-05 20:51:14 ⑦零ゞ距离(76159179)
我现在设置的锁是可以读的
2009-06-05 20:51:16 杨航(282602809)
是根据不同的逻辑使用不同的
2009-06-05 20:51:25 杨航(282602809)
也有可改的
2009-06-05 20:51:35 ⑦零ゞ距离(76159179)
设置字段锁应该在存储过程里锁还是在程序锁
2009-06-05 20:51:37 杨航(282602809)
比如,股票撮合委托成交
2009-06-05 20:52:06 杨航(282602809)
这就需要被select表的行情数据是时时新的,要求能够被更改的
2009-06-05 20:52:15 ⑦零ゞ距离(76159179)
其实我一直都没有搞清楚数据库的锁是这么回事
2009-06-05 20:52:22 ⑦零ゞ距离(76159179)
也不太清楚原理
2009-06-05 20:52:22 杨航(282602809)
因为股票的价格一直是在被变的
2009-06-05 20:52:39 杨航(282602809)
锁,就是不让别人用了
2009-06-05 20:52:48 杨航(282602809)
有什么不理解的?
2009-06-05 20:53:26 ⑦零ゞ距离(76159179)
我知道,但是这个锁有级别的
2009-06-05 20:53:35 ⑦零ゞ距离(76159179)
每个级别的功能好像不太一样
2009-06-05 20:53:40 杨航(282602809)
恩
2009-06-05 20:53:46 杨航(282602809)
要根据你系统设计而定
2009-06-05 20:53:52 杨航(282602809)
比如
2009-06-05 20:53:55 杨航(282602809)
银行转帐
2009-06-05 20:54:10 杨航(282602809)
当我要向你银行转帐时
2009-06-05 20:54:29 杨航(282602809)
就要求操作期间,我们之间的帐户钱数不能被其他程序改变
2009-06-05 20:54:53 杨航(282602809)
否则,比如正在操作能,别人把我钱在期间弄少了,或多了
2009-06-05 20:54:57 杨航(282602809)
那不就乱套了
2009-06-05 20:55:03 ⑦零ゞ距离(76159179)
呵呵,是啊
2009-06-05 20:55:15 ⑦零ゞ距离(76159179)
我现在设计的事务操作没有考虑到这些
2009-06-05 20:55:23 杨航(282602809)
这时,就要对我的帐户进行加缩,对你的帐户加缩
2009-06-05 20:55:24 ⑦零ゞ距离(76159179)
也因为有疑问
2009-06-05 20:55:39 杨航(282602809)
回头你想想,股票交易
2009-06-05 20:56:00 杨航(282602809)
当一个客户想交易时,他希望的能成交的价格是最新的
2009-06-05 20:56:01 ⑦零ゞ距离(76159179)
没买过股票
2009-06-05 20:56:05 ⑦零ゞ距离(76159179)
所以不是很清楚的
2009-06-05 20:56:28 杨航(282602809)
这时候把能变更的那个表给锁上了,不能更新了,这家伙不就老也交易不成功吗?
2009-06-05 20:56:43 ⑦零ゞ距离(76159179)
嗯
2009-06-05 20:56:48 杨航(282602809)
买股票原理是这样
2009-06-05 20:56:53 杨航(282602809)
先下委托单
2009-06-05 20:57:13 ⑦零ゞ距离(76159179)
我觉得一般情况是锁记录就可以了
2009-06-05 20:57:18 杨航(282602809)
你是想买,或想卖,想买多少,想卖多少,先在软件里下单
2009-06-05 20:57:29 杨航(282602809)
然后你的数据送到交易锁进行撮合
2009-06-05 20:57:35 ⑦零ゞ距离(76159179)
不需要锁整张表吧
2009-06-05 20:57:45 杨航(282602809)
撮合就是,有匹配你的价格和数量,就进行成交
2009-06-05 20:57:55 杨航(282602809)
没有的就继续等待
2009-06-05 20:58:02 杨航(282602809)
这个不用
2009-06-05 20:58:10 杨航(282602809)
因为表的数据是时时变化的
2009-06-05 20:58:26 杨航(282602809)
不一定什么时候有人想买,什么时候想卖,什么时候出什么样的价格
2009-06-05 20:58:05 ⑦零ゞ距离(76159179)
哦
2009-06-05 20:58:29 杨航(282602809)
都是变动的
2009-06-05 20:58:51 杨航(282602809)
股票大盘的K线图,就是根据那个来的
2009-06-05 20:58:50 ⑦零ゞ距离(76159179)
当我们锁住该记录的时候,其它人应该是无法删除的吧
2009-06-05 20:58:59 杨航(282602809)
恩
2009-06-05 20:59:03 杨航(282602809)
这是有权限的
2009-06-05 20:59:10 杨航(282602809)
你也可以让它删除
2009-06-05 20:59:23 杨航(282602809)
很详细的哦
2009-06-05 20:59:20 杨航(282602809)
这方面资料,你可以找一找
2009-06-05 20:59:54 杨航(282602809)
不过你放心,你能想到的,肯定有解决方案
2009-06-05 21:00:02 ⑦零ゞ距离(76159179)
嗯,谢谢群主
2009-06-05 21:00:09 ⑦零ゞ距离(76159179)
解决了我很多困惑
2009-06-05 21:00:20 杨航(282602809)
呵呵
2009-06-05 21:00:28 ⑦零ゞ距离(76159179)
主要做这行较短
2009-06-05 21:00:31 ⑦零ゞ距离(76159179)
经验太少了
2009-06-05 21:00:36 杨航(282602809)
多长时间了?
2009-06-05 21:00:39 ⑦零ゞ距离(76159179)
缺乏大项目的锻炼
2009-06-05 21:00:40 ⑦零ゞ距离(76159179)
2年
2009-06-05 21:00:46 ⑦零ゞ距离(76159179)
都是做一些小的项目
2009-06-05 21:00:50 杨航(282602809)
哦
2009-06-05 21:01:19 杨航(282602809)
如果你的操作进行了死锁
2009-06-05 21:01:34 杨航(282602809)
不要在程序上挑毛病
2009-06-05 21:01:55 杨航(282602809)
一定要在架构中找瓶颈
2009-06-05 21:02:42 ⑦零ゞ距离(76159179)
是啊,我知道在架构中出了问题
2009-06-05 21:02:33 杨航(282602809)
把瓶颈部分挑出来,进行分布式处理或者等待处理
2009-06-05 21:03:00 ⑦零ゞ距离(76159179)
但是还没有很有效的解决方案
2009-06-05 21:03:39 杨航(282602809)
在大一些的,就要用分割数据库,进行分布式
2009-06-05 21:04:15 杨航(282602809)
就是用一个数据库进行对多个库索引
2009-06-05 21:04:32 杨航(282602809)
多个库的表结构都是一样的
2009-06-05 21:05:05 杨航(282602809)
这样每个库的承载量就小,压力就分散开来了
2009-06-05 21:04:01 杨航(282602809)
分布式数据库道理挺简单的
2009-06-05 21:05:29 杨航(282602809)
不需要
2009-06-05 21:05:45 杨航(282602809)
那还做什么分布式负载均衡啊
2009-06-05 21:05:50 ⑦零ゞ距离(76159179)
不需要的访问的时候怎么获得所有的数据
2009-06-05 21:05:03 ⑦零ゞ距离(76159179)
这样需不需要一个共同的库来保存所有的数据
2009-06-05 21:05:52 杨航(282602809)
那就拿那个库干被
2009-06-05 21:06:11 杨航(282602809)
这个你要考虑用户体验问题
2009-06-05 21:06:34 杨航(282602809)
比如,我想查一条信息
2009-06-05 21:06:57 杨航(282602809)
不是查一条,按一个条件去查
2009-06-05 21:07:06 ⑦零ゞ距离(76159179)
对啊
2009-06-05 21:07:14 ⑦零ゞ距离(76159179)
但是我不并不知道保持在什么库
2009-06-05 21:07:29 杨航(282602809)
通常我们的数据库表里经常进行条件查询的字段,都会做表索引吧?
2009-06-05 21:07:38 ⑦零ゞ距离(76159179)
会
2009-06-05 21:07:50 杨航(282602809)
比如,你用asp.net
2009-06-05 21:07:53 ⑦零ゞ距离(76159179)
但是放在不同的服务器
2009-06-05 21:07:58 杨航(282602809)
里面进行分页
2009-06-05 21:08:09 ⑦零ゞ距离(76159179)
系统也 没有那么智能啊
2009-06-05 21:08:27 杨航(282602809)
比如查到1000万条数据,你不会真的把1000万条直接给datasource然后databind吧?
2009-06-05 21:08:43 ⑦零ゞ距离(76159179)
没有
2009-06-05 21:08:49 ⑦零ゞ距离(76159179)
当然不会
2009-06-05 21:09:16 ⑦零ゞ距离(76159179)
我的意思是说如果这1000万分布在5个数据库的话
2009-06-05 21:09:22 杨航(282602809)
恩
2009-06-05 21:09:30 ⑦零ゞ距离(76159179)
那我要怎么查询呢
2009-06-05 21:09:49 杨航(282602809)
首先, 字段加索引了,count是很快的
2009-06-05 21:10:04 杨航(282602809)
你一下就知道共多少条数据了吧
2009-06-05 21:10:36 ⑦零ゞ距离(76159179)
一般查询的语句都是针对一个数据库的
2009-06-05 21:10:51 杨航(282602809)
你五个表,都可以是结构一样的
2009-06-05 21:10:50 ⑦零ゞ距离(76159179)
如果分布式的话,查询是怎么写得
2009-06-05 21:11:33 ⑦零ゞ距离(76159179)
我知道,是不是我查询的时候连上所有的服务器,然后count这些表
2009-06-05 21:11:38 杨航(282602809)
难道你想不通吗?
2009-06-05 21:11:44 杨航(282602809)
恩
2009-06-05 21:11:57 杨航(282602809)
首先是知道共多少条数据了吧?
2009-06-05 21:12:39 ⑦零ゞ距离(76159179)
啊,那样我每加一个服务器不是要去改sql语句
2009-06-05 21:12:56 杨航(282602809)
那就是你写程序习惯的问题了
2009-06-05 21:13:40 杨航(282602809)
如果写的够公用化,应该多一台服务器,只是多一个conn的问题
2009-06-05 21:14:15 ⑦零ゞ距离(76159179)
呵呵,不太清楚这个要怎么做
2009-06-05 21:14:30 杨航(282602809)
好
2009-06-05 21:14:32 杨航(282602809)
我引导你
2009-06-05 21:14:39 杨航(282602809)
首先
2009-06-05 21:15:05 杨航(282602809)
即使得到数据,也应该不是select全部吧
2009-06-05 21:15:14 ⑦零ゞ距离(76159179)
是
2009-06-05 21:15:14 杨航(282602809)
应该top多少多少吧
2009-06-05 21:15:23 ⑦零ゞ距离(76159179)
对
2009-06-05 21:15:29 杨航(282602809)
但是一共多少条知道吧
2009-06-05 21:15:43 杨航(282602809)
根据多少条应该知道一共多少页面吧
2009-06-05 21:16:17 ⑦零ゞ距离(76159179)
不是,我的意思是说我每次查询的时候是不是要连上所有的数据库服务器
2009-06-05 21:16:16 杨航(282602809)
知道多少条根据count是很快的吧
2009-06-05 21:16:22 杨航(282602809)
对呀
2009-06-05 21:16:27 杨航(282602809)
得连上啊
2009-06-05 21:16:34 ⑦零ゞ距离(76159179)
那要怎么连
2009-06-05 21:16:43 杨航(282602809)
这样
2009-06-05 21:16:43 ⑦零ゞ距离(76159179)
就是数据操作类要怎么设计呢
2009-06-05 21:16:58 ⑦零ゞ距离(76159179)
让我写的sql可以跟一台一样呢
2009-06-05 21:17:00 杨航(282602809)
你研究研究petshop这个框架好吧
2009-06-05 21:17:03 杨航(282602809)
你听说过吗?
2009-06-05 21:17:07 杨航(282602809)
petshop4
2009-06-05 21:17:11 ⑦零ゞ距离(76159179)
听说过
2009-06-05 21:17:27 ⑦零ゞ距离(76159179)
微软的sqlhelper有用过
2009-06-05 21:17:36 杨航(282602809)
你会不会泛型?
2009-06-05 21:18:19 ⑦零ゞ距离(76159179)
会
2009-06-05 21:18:26 杨航(282602809)
如果你没研究过泛型,建议研究研究先,可能我说的你没有概念
2009-06-05 21:18:34 杨航(282602809)
好
2009-06-05 21:18:44 杨航(282602809)
既然会的话,你看看petshop
2009-06-05 21:18:54 杨航(282602809)
应该比我嘴说的明白
2009-06-05 21:19:04 杨航(282602809)
具体有好多细节,我可能说不明白
2009-06-05 21:19:55 杨航(282602809)
既然有了泛型,那么不管你什么数据库过来的,什么表过来的,他是不是都可以给你构造成一个表对象
2009-06-05 21:20:01 杨航(282602809)
这你明白了吧
2009-06-05 21:20:04 ⑦零ゞ距离(76159179)
是的
2009-06-05 21:20:15 杨航(282602809)
你5个库过来的表
2009-06-05 21:20:29 杨航(282602809)
10个库,哪怕是另两个库是其他的数据库
2009-06-05 21:20:43 杨航(282602809)
构造到泛型里,都可以变成一个表
2009-06-05 21:21:04 ⑦零ゞ距离(76159179)
问题是我每次操作好像都只是操作一个连接
2009-06-05 21:21:13 杨航(282602809)
一共十条信息,有可能2条来自sql,有的来自oracle,有的来自其他
2009-06-05 21:21:31 杨航(282602809)
是啊
2009-06-05 21:21:57 杨航(282602809)
但是你可以把得出的表构造到泛型里啊
2009-06-05 21:22:47 杨航(282602809)
我问你
2009-06-05 21:22:55 ⑦零ゞ距离(76159179)
得出的表构造到泛型,是保持表结构,还是信息呢
2009-06-05 21:22:56 杨航(282602809)
有10条记录
2009-06-05 21:23:01 ⑦零ゞ距离(76159179)
嗯
2009-06-05 21:23:40 杨航(282602809)
分别要求从access里选5条,和sql里选5条,然后显示在一页里,他们有同样字段数,和字段意义
2009-06-05 21:23:48 杨航(282602809)
这个活你能干出来不?
2009-06-05 21:24:02 ⑦零ゞ距离(76159179)
能,但是我要事先知道
2009-06-05 21:24:27 杨航(282602809)
他们俩不就分布开了嘛?
2009-06-05 21:24:39 杨航(282602809)
明白原理啦?
2009-06-05 21:25:06 杨航(282602809)
而中间怎么选,这就要看你的中间程序怎么写
2009-06-05 21:25:13 杨航(282602809)
就相当于索引怎么索引了
2009-06-05 21:25:18 翔鸟(78255140)
要是排序,怎么办呢?
2009-06-05 21:25:34 ⑦零ゞ距离(76159179)
翔鸟问得好
2009-06-05 21:25:42 杨航(282602809)
字段加的索引,就是排序文件东西
2009-06-05 21:25:52 杨航(282602809)
数据库的原理是2叉数
2009-06-05 21:26:01 杨航(282602809)
折半查找原理
2009-06-05 21:26:04 ⑦零ゞ距离(76159179)
哦
2009-06-05 21:26:25 杨航(282602809)
要不你加索引文件,怎么查东西比一般快
2009-06-05 21:27:12 杨航(282602809)
而索引库,就是拿着他们的索引说事
2009-06-05 21:27:22 杨航(282602809)
拿着他们的索引上其他库里找
2009-06-05 21:27:29 杨航(282602809)
比如,你建立个表
2009-06-05 21:27:40 杨航(282602809)
表里有 姓名,性别,年龄字段
2009-06-05 21:27:47 ⑦零ゞ距离(76159179)
杨兄,你的意思时候说,如果分布式的话,我在操作数据库的话需要去构造一个连接集合,然后遍历集合,逐个连接,然后把得到的数据拼到一起对吗
2009-06-05 21:27:53 杨航(282602809)
你经常用姓名为关键字查找
2009-06-05 21:28:06 杨航(282602809)
恩
2009-06-05 21:28:17 杨航(282602809)
但是中间要有一个索引库
明白吗?
2009-06-05 21:28:16 ⑦零ゞ距离(76159179)
这样我明白了
2009-06-05 21:28:28 ⑦零ゞ距离(76159179)
索引库保存什么呢
2009-06-05 21:28:47 杨航(282602809)
目的是把所有索引字段内容进行大排序
2009-06-05 21:29:03 杨航(282602809)
然后根据索引找到是哪个库,哪行记录
2009-06-05 21:29:24 杨航(282602809)
我问你
2009-06-05 21:29:29 杨航(282602809)
你一个数据库
2009-06-05 21:29:34 ⑦零ゞ距离(76159179)
需要实时更新吗
2009-06-05 21:29:38 杨航(282602809)
一张表,你为什么要建立索引文件
2009-06-05 21:29:45 杨航(282602809)
对呀,得实施更新啊
2009-06-05 21:29:51 ⑦零ゞ距离(76159179)
加速查询
2009-06-05 21:30:07 杨航(282602809)
但你字段它加速查询的原理吗?
2009-06-05 21:30:21 ⑦零ゞ距离(76159179)
更新索引信息,还是把所有的字段数据放到索引库呢
2009-06-05 21:30:23 ⑦零ゞ距离(76159179)
不知道
2009-06-05 21:30:36 杨航(282602809)
你说对了一半
2009-06-05 21:31:02 杨航(282602809)
所谓索引文件,就是排序文件
2009-06-05 21:31:21 杨航(282602809)
比如,你弄个姓名字段,做索引
2009-06-05 21:31:41 ⑦零ゞ距离(76159179)
实际我做索引都是跟着事件探查器的结果让企业管理器去帮我生成
2009-06-05 21:31:42 杨航(282602809)
每当进行增删改时,就要对姓名的索引文件进行一次排序
2009-06-05 21:31:56 ⑦零ゞ距离(76159179)
所以我并不是 很清楚数据库索引需要怎么加
2009-06-05 21:32:01 ⑦零ゞ距离(76159179)
怎么设置才合理
2009-06-05 21:32:25 杨航(282602809)
哦,那个它一般就给你弄个累加id,目的 是唯一标识
2009-06-05 21:32:38 杨航(282602809)
索引文件,就是排序文件
2009-06-05 21:32:49 杨航(282602809)
目的就是为了进行折半查找用
2009-06-05 21:33:08 杨航(282602809)
数据结构你学过吧,折半查找原理就不用我说了吧
2009-06-05 21:33:17 ⑦零ゞ距离(76159179)
没有学过才糟糕啊
2009-06-05 21:33:21 ⑦零ゞ距离(76159179)
我不是科班出身的
2009-06-05 21:33:35 ⑦零ゞ距离(76159179)
数据结构最近才开始看
2009-06-05 21:33:40 杨航(282602809)
[表情]
2009-06-05 21:33:46 杨航(282602809)
原理是这样的
2009-06-05 21:33:29 ⑦零ゞ距离(76159179)
所以很多东西我是不懂
2009-06-05 21:34:14 杨航(282602809)
比如,1-10,10个数字,表示10个数值
2009-06-05 21:34:30 杨航(282602809)
比如我们插入的顺序是这样的
2009-06-05 21:34:39 ⑦零ゞ距离(76159179)
这个我知道
2009-06-05 21:34:44 杨航(282602809)
3 2 4 1 5 7 6 8 10 9
2009-06-05 21:35:04 杨航(282602809)
你知道什么?
2009-06-05 21:35:13 杨航(282602809)
折半查找原理?
2009-06-05 21:35:25 ⑦零ゞ距离(76159179)
在插入数据的时候,数据库会对id字段进行排序查找位置,然后插入
2009-06-05 21:35:29 ⑦零ゞ距离(76159179)
是这样吗
2009-06-05 21:35:35 ⑦零ゞ距离(76159179)
折半查找原理不知道
2009-06-05 21:35:49 杨航(282602809)
我跟你说的是折半查找原理
2009-06-05 21:35:58 ⑦零ゞ距离(76159179)
哦
2009-06-05 21:36:14 杨航(282602809)
比如正常一个字段,我们输入顺序是这样的
3 2 4 1 5 7 6 8 10 9
2009-06-05 21:36:18 ⑦零ゞ距离(76159179)
嗯
2009-06-05 21:36:47 杨航(282602809)
正常我们想找到8在哪,你怎么找
2009-06-05 21:36:44 ⑦零ゞ距离(76159179)
然后呢
2009-06-05 21:36:57 ⑦零ゞ距离(76159179)
一个个找
2009-06-05 21:36:58 杨航(282602809)
是不是得挨个验证一下啊
2009-06-05 21:37:03 ⑦零ゞ距离(76159179)
对
2009-06-05 21:37:06 杨航(282602809)
从头到尾
2009-06-05 21:37:15 ⑦零ゞ距离(76159179)
找到就不找了
2009-06-05 21:37:19 杨航(282602809)
对
2009-06-05 21:37:33 杨航(282602809)
这是10个数
2009-06-05 21:37:39 ⑦零ゞ距离(76159179)
是
2009-06-05 21:37:40 杨航(282602809)
1000万个数呢?
2009-06-05 21:37:45 ⑦零ゞ距离(76159179)
不行
2009-06-05 21:37:50 ⑦零ゞ距离(76159179)
这样就太慢了
2009-06-05 21:37:50 杨航(282602809)
是不是需要好长时间?
2009-06-05 21:37:53 ⑦零ゞ距离(76159179)
对
2009-06-05 21:37:59 杨航(282602809)
但你看这样
2009-06-05 21:38:07 杨航(282602809)
3 2 4 1 5 7 6 8 10 9
对他们进行排序
2009-06-05 21:38:18 杨航(282602809)
1 2 3 4 5 6 7 8 9 10
2009-06-05 21:38:30 杨航(282602809)
这是他们的顺序吧
2009-06-05 21:38:33 ⑦零ゞ距离(76159179)
是
2009-06-05 21:38:44 杨航(282602809)
排序顺序
2009-06-05 21:39:08 杨航(282602809)
我们应该很快就知道这是10条数据
2009-06-05 21:39:13 杨航(282602809)
这个没错吧
2009-06-05 21:39:31 ⑦零ゞ距离(76159179)
是
2009-06-05 21:39:48 杨航(282602809)
10条数据,10个位置
2009-06-05 21:40:04 杨航(282602809)
折半原理是除2比较大小
2009-06-05 21:40:14 杨航(282602809)
10/2=5吧
2009-06-05 21:40:41 ⑦零ゞ距离(76159179)
对
2009-06-05 21:40:43 杨航(282602809)
我用8与5这个位置上的数字比较
2009-06-05 21:40:49 杨航(282602809)
发现,大了
2009-06-05 21:40:55 杨航(282602809)
好
2009-06-05 21:41:06 ⑦零ゞ距离(76159179)
然后呢
2009-06-05 21:41:24 杨航(282602809)
那就很快判断它在5678910之间
2009-06-05 21:41:29 ⑦零ゞ距离(76159179)
对
2009-06-05 21:41:29 杨航(282602809)
而不是12345之间吧
2009-06-05 21:41:33 ⑦零ゞ距离(76159179)
嗯
2009-06-05 21:41:45 杨航(282602809)
然后5-10之间,中间的数是什么?
2009-06-05 21:41:57 ⑦零ゞ距离(76159179)
8
2009-06-05 21:42:09 杨航(282602809)
拿8比较,不就命中了嘛
2009-06-05 21:42:13 ⑦零ゞ距离(76159179)
嗯
2009-06-05 21:42:16 ⑦零ゞ距离(76159179)
明白了
2009-06-05 21:42:19 ⑦零ゞ距离(76159179)
谢谢群主
2009-06-05 21:42:22 ⑦零ゞ距离(76159179)
回去再聊
2009-06-05 21:42:24 杨航(282602809)
这个数量级越大
2009-06-05 21:42:30 ⑦零ゞ距离(76159179)
嗯
2009-06-05 21:42:29 杨航(282602809)
越显得块
2009-06-05 20:20:14 ⑦零ゞ距离(76159179)
群主做了几年开发了
2009-06-05 20:20:58 杨航(282602809)
好些年了
2009-06-05 20:22:24 ⑦零ゞ距离(76159179)
呵呵,做行业软件还是?
2009-06-05 20:22:45 杨航(282602809)
做男人好些个年了
2009-06-05 20:22:50 ⑦零ゞ距离(76159179)
哈哈
2009-06-05 20:23:18 杨航(282602809)
呵呵
2009-06-05 20:23:51 ⑦零ゞ距离(76159179)
经常做设计不?
2009-06-05 20:24:11 杨航(282602809)
什么设计
2009-06-05 20:24:22 ⑦零ゞ距离(76159179)
架构设计
2009-06-05 20:24:24 杨航(282602809)
哦
2009-06-05 20:24:30 杨航(282602809)
那是得做的
2009-06-05 20:24:50 ⑦零ゞ距离(76159179)
呵呵,有没有什么心得可以交流下
2009-06-05 20:25:08 杨航(282602809)
那得有具体问题
2009-06-05 20:25:18 杨航(282602809)
让我上来就讲,我也不知道说什么啊
2009-06-05 20:26:37 杨航(282602809)
你看看你有什么地方不清楚的,看看我知道不
2009-06-05 20:26:43 杨航(282602809)
哈哈
2009-06-05 20:29:29 杨航(282602809)
上来就真没敢问的
2009-06-05 20:30:24 ⑦零ゞ距离(76159179)
呵呵,我想问一下,你在事务这块是这么处理的
2009-06-05 20:32:09 杨航(282602809)
就是些个需要并行处理的东西用它啊
2009-06-05 20:33:04 杨航(282602809)
比如,转帐
一边+钱,一边-钱,需要同步时
2009-06-05 20:33:08 ⑦零ゞ距离(76159179)
呵呵,我在大批量数据进行插入的时候经常会碰到死锁
2009-06-05 20:33:10 杨航(282602809)
就是需要同步联系的东西
2009-06-05 20:33:26 杨航(282602809)
哦
2009-06-05 20:33:32 ⑦零ゞ距离(76159179)
我发现这个东西是不是需要队列进行等待
2009-06-05 20:33:33 杨航(282602809)
批量时
2009-06-05 20:33:38 杨航(282602809)
就要进行日志核对
2009-06-05 20:33:46 杨航(282602809)
不家事务
2009-06-05 20:33:52 杨航(282602809)
就是先锁表
2009-06-05 20:33:54 杨航(282602809)
在插
2009-06-05 20:33:55 ⑦零ゞ距离(76159179)
比如主从表数据插入更新
2009-06-05 20:34:13 杨航(282602809)
两头插完了后比较缺的部分,在匹配更新
2009-06-05 20:34:27 杨航(282602809)
表数据插如更新?
2009-06-05 20:34:37 杨航(282602809)
msmq
2009-06-05 20:34:42 杨航(282602809)
可以用这个
2009-06-05 20:34:54 杨航(282602809)
msmq里可以在硬盘里存
2009-06-05 20:34:56 ⑦零ゞ距离(76159179)
但是这样会不会影响性能呢
2009-06-05 20:34:59 杨航(282602809)
也是个不错的选择
2009-06-05 20:35:12 杨航(282602809)
你可以用COM+做分布处理
2009-06-05 20:35:25 ⑦零ゞ距离(76159179)
变成一张表一次只能一个人插入数据
2009-06-05 20:35:31 ⑦零ゞ距离(76159179)
其它的人要等
2009-06-05 20:35:34 杨航(282602809)
MSMQ可以调用COM+组件的
2009-06-05 20:35:45 ⑦零ゞ距离(76159179)
回去研究下
2009-06-05 20:35:48 ⑦零ゞ距离(76159179)
知道有这个东西
2009-06-05 20:35:47 杨航(282602809)
你是说这个事啊
2009-06-05 20:35:58 ⑦零ゞ距离(76159179)
com+也在书上见过
2009-06-05 20:36:09 ⑦零ゞ距离(76159179)
但是没有用过,好像不是 太好用
2009-06-05 20:36:13 杨航(282602809)
COM+可以做分布式均衡负载
2009-06-05 20:36:21 杨航(282602809)
application center进行负载
2009-06-05 20:36:38 ⑦零ゞ距离(76159179)
负载的用户最大有多少
2009-06-05 20:37:00 杨航(282602809)
这个是局域网内部多少台机器了
2009-06-05 20:37:15 杨航(282602809)
MSMQ可以根据IP传对象的
2009-06-05 20:37:29 杨航(282602809)
网络之间可以用http传
2009-06-05 20:37:41 杨航(282602809)
可以走内部队列
2009-06-05 20:38:01 ⑦零ゞ距离(76159179)
这样啊
2009-06-05 20:38:04 杨航(282602809)
如果数据量大,你就要考虑分布式数据库了
2009-06-05 20:38:12 ⑦零ゞ距离(76159179)
到时候改造看看
2009-06-05 20:38:22 杨航(282602809)
因为数据库连接是一个瓶颈
2009-06-05 20:38:24 ⑦零ゞ距离(76159179)
我之前做的框架就是有这方面的问题
2009-06-05 20:38:30 ⑦零ゞ距离(76159179)
并发多的时候会出现问题
2009-06-05 20:38:31 ⑦零ゞ距离(76159179)
是啊
2009-06-05 20:38:39 ⑦零ゞ距离(76159179)
数据连接太少了
2009-06-05 20:39:10 杨航(282602809)
关键和你带宽,和数据量以及用户并发都有关
2009-06-05 20:39:36 ⑦零ゞ距离(76159179)
带宽还好了
2009-06-05 20:39:39 杨航(282602809)
它的瓶颈口和 IIS一样
2009-06-05 20:39:47 ⑦零ゞ距离(76159179)
我做的大部分都是内部系统
2009-06-05 20:39:50 杨航(282602809)
哦
2009-06-05 20:40:09 ⑦零ゞ距离(76159179)
分布式的数据库架构要怎么做
2009-06-05 20:40:13 ⑦零ゞ距离(76159179)
大概的模式
2009-06-05 20:40:12 杨航(282602809)
你是没见过满负荷干活的
2009-06-05 20:40:16 ⑦零ゞ距离(76159179)
一直不是很清楚
2009-06-05 20:40:18 ⑦零ゞ距离(76159179)
是啊
2009-06-05 20:40:31 杨航(282602809)
我做过海关的项目,就是满负荷干活的
2009-06-05 20:40:57 杨航(282602809)
这个群里还有个巴特勒船长,也是管理员
2009-06-05 20:41:08 杨航(282602809)
他是和我一起做海关项目的
2009-06-05 20:41:25 ⑦零ゞ距离(76159179)
啊,很想有这个机会
2009-06-05 20:41:45 ⑦零ゞ距离(76159179)
我做的项目很少有满负荷跑得
2009-06-05 20:41:48 杨航(282602809)
海关服务器很多,带宽很足,但报文也能延时半个小时
2009-06-05 20:41:52 杨航(282602809)
有时候一个小时
2009-06-05 20:42:00 ⑦零ゞ距离(76159179)
基本都是很宽松
2009-06-05 20:42:15 ⑦零ゞ距离(76159179)
这个延时是怎么回事
2009-06-05 20:43:02 杨航(282602809)
CPU内存基本都是满的
2009-06-05 20:43:15 杨航(282602809)
16g内存和8核心CPU
2009-06-05 20:43:23 杨航(282602809)
就是业务量大
2009-06-05 20:43:58 杨航(282602809)
大连海关高峰期跑好多报文,每个都有好多逻辑,对数据库操作的
2009-06-05 20:44:00 ⑦零ゞ距离(76159179)
业务量大的时候,你怎么做延时
2009-06-05 20:43:43 ⑦零ゞ距离(76159179)
cpu一般我做的系统就是50%
2009-06-05 20:44:15 杨航(282602809)
恩,那你是没加多线程,所以在50%以下
2009-06-05 20:44:16 ⑦零ゞ距离(76159179)
是对操作进行等待
2009-06-05 20:44:37 ⑦零ゞ距离(76159179)
主要对多线程不是 很了解
2009-06-05 20:44:32 杨航(282602809)
就是msmq里啊
2009-06-05 20:44:52 ⑦零ゞ距离(76159179)
操作员不是 要等死啊
2009-06-05 20:44:58 杨航(282602809)
msmq+com+也有事务性的
2009-06-05 20:45:04 杨航(282602809)
里面也是有所等待的
2009-06-05 20:45:08 ⑦零ゞ距离(76159179)
这个我知道
2009-06-05 20:45:46 杨航(282602809)
数据库的事务操作千万不能过大
2009-06-05 20:45:56 杨航(282602809)
你知道数据库事物的操作原理吗?
2009-06-05 20:46:42 ⑦零ゞ距离(76159179)
很少嵌套事务
2009-06-05 20:46:43 杨航(282602809)
是这样的
2009-06-05 20:46:49 ⑦零ゞ距离(76159179)
不知道事务操作的原理
2009-06-05 20:46:35 ⑦零ゞ距离(76159179)
我一般一个事务里操作的逻辑都比较简单
2009-06-05 20:46:57 杨航(282602809)
事务为了达到同步是这么实现的
2009-06-05 20:47:03 杨航(282602809)
比如银行转帐
2009-06-05 20:47:09 杨航(282602809)
我把钱转给你
2009-06-05 20:47:10 ⑦零ゞ距离(76159179)
上学的时候没有学过
2009-06-05 20:47:14 杨航(282602809)
比如转50元
2009-06-05 20:47:36 ⑦零ゞ距离(76159179)
我只是知道事务是为了保证数据的唯一性和准确性
2009-06-05 20:47:52 ⑦零ゞ距离(76159179)
银行转帐确实是事务的经典案例
2009-06-05 20:48:41 杨航(282602809)
首先是对表,进行加锁,不让别人用
然后执行
我这边 set money=money-50
你那边 set money=money+50
然后解锁
2009-06-05 20:49:07 杨航(282602809)
如果事务中有数据根据的话
2009-06-05 20:49:19 杨航(282602809)
比如在事务里需要select 什么,或insert什么
2009-06-05 20:49:31 杨航(282602809)
都在内存里进行虚操作检查
2009-06-05 20:49:50 杨航(282602809)
然后在加锁进行同步,在解锁
2009-06-05 20:49:55 杨航(282602809)
是为了保证同步
2009-06-05 20:50:10 ⑦零ゞ距离(76159179)
锁定了以后该表是不是不能查询了
2009-06-05 20:50:28 杨航(282602809)
这时,同步的数据select有可能被改变
2009-06-05 20:50:30 ⑦零ゞ距离(76159179)
我记得了如果表被锁定了,查询也不行了
2009-06-05 20:50:34 杨航(282602809)
就造成了脏读数据
2009-06-05 20:50:41 杨航(282602809)
恩
2009-06-05 20:50:45 ⑦零ゞ距离(76159179)
查询的是以前的数据
2009-06-05 20:50:55 杨航(282602809)
看怎么锁
2009-06-05 20:50:59 ⑦零ゞ距离(76159179)
但是如果不能查询肯定是不行的
2009-06-05 20:51:05 杨航(282602809)
有表锁,有字段锁
2009-06-05 20:51:14 ⑦零ゞ距离(76159179)
我现在设置的锁是可以读的
2009-06-05 20:51:16 杨航(282602809)
是根据不同的逻辑使用不同的
2009-06-05 20:51:25 杨航(282602809)
也有可改的
2009-06-05 20:51:35 ⑦零ゞ距离(76159179)
设置字段锁应该在存储过程里锁还是在程序锁
2009-06-05 20:51:37 杨航(282602809)
比如,股票撮合委托成交
2009-06-05 20:52:06 杨航(282602809)
这就需要被select表的行情数据是时时新的,要求能够被更改的
2009-06-05 20:52:15 ⑦零ゞ距离(76159179)
其实我一直都没有搞清楚数据库的锁是这么回事
2009-06-05 20:52:22 ⑦零ゞ距离(76159179)
也不太清楚原理
2009-06-05 20:52:22 杨航(282602809)
因为股票的价格一直是在被变的
2009-06-05 20:52:39 杨航(282602809)
锁,就是不让别人用了
2009-06-05 20:52:48 杨航(282602809)
有什么不理解的?
2009-06-05 20:53:26 ⑦零ゞ距离(76159179)
我知道,但是这个锁有级别的
2009-06-05 20:53:35 ⑦零ゞ距离(76159179)
每个级别的功能好像不太一样
2009-06-05 20:53:40 杨航(282602809)
恩
2009-06-05 20:53:46 杨航(282602809)
要根据你系统设计而定
2009-06-05 20:53:52 杨航(282602809)
比如
2009-06-05 20:53:55 杨航(282602809)
银行转帐
2009-06-05 20:54:10 杨航(282602809)
当我要向你银行转帐时
2009-06-05 20:54:29 杨航(282602809)
就要求操作期间,我们之间的帐户钱数不能被其他程序改变
2009-06-05 20:54:53 杨航(282602809)
否则,比如正在操作能,别人把我钱在期间弄少了,或多了
2009-06-05 20:54:57 杨航(282602809)
那不就乱套了
2009-06-05 20:55:03 ⑦零ゞ距离(76159179)
呵呵,是啊
2009-06-05 20:55:15 ⑦零ゞ距离(76159179)
我现在设计的事务操作没有考虑到这些
2009-06-05 20:55:23 杨航(282602809)
这时,就要对我的帐户进行加缩,对你的帐户加缩
2009-06-05 20:55:24 ⑦零ゞ距离(76159179)
也因为有疑问
2009-06-05 20:55:39 杨航(282602809)
回头你想想,股票交易
2009-06-05 20:56:00 杨航(282602809)
当一个客户想交易时,他希望的能成交的价格是最新的
2009-06-05 20:56:01 ⑦零ゞ距离(76159179)
没买过股票
2009-06-05 20:56:05 ⑦零ゞ距离(76159179)
所以不是很清楚的
2009-06-05 20:56:28 杨航(282602809)
这时候把能变更的那个表给锁上了,不能更新了,这家伙不就老也交易不成功吗?
2009-06-05 20:56:43 ⑦零ゞ距离(76159179)
嗯
2009-06-05 20:56:48 杨航(282602809)
买股票原理是这样
2009-06-05 20:56:53 杨航(282602809)
先下委托单
2009-06-05 20:57:13 ⑦零ゞ距离(76159179)
我觉得一般情况是锁记录就可以了
2009-06-05 20:57:18 杨航(282602809)
你是想买,或想卖,想买多少,想卖多少,先在软件里下单
2009-06-05 20:57:29 杨航(282602809)
然后你的数据送到交易锁进行撮合
2009-06-05 20:57:35 ⑦零ゞ距离(76159179)
不需要锁整张表吧
2009-06-05 20:57:45 杨航(282602809)
撮合就是,有匹配你的价格和数量,就进行成交
2009-06-05 20:57:55 杨航(282602809)
没有的就继续等待
2009-06-05 20:58:02 杨航(282602809)
这个不用
2009-06-05 20:58:10 杨航(282602809)
因为表的数据是时时变化的
2009-06-05 20:58:26 杨航(282602809)
不一定什么时候有人想买,什么时候想卖,什么时候出什么样的价格
2009-06-05 20:58:05 ⑦零ゞ距离(76159179)
哦
2009-06-05 20:58:29 杨航(282602809)
都是变动的
2009-06-05 20:58:51 杨航(282602809)
股票大盘的K线图,就是根据那个来的
2009-06-05 20:58:50 ⑦零ゞ距离(76159179)
当我们锁住该记录的时候,其它人应该是无法删除的吧
2009-06-05 20:58:59 杨航(282602809)
恩
2009-06-05 20:59:03 杨航(282602809)
这是有权限的
2009-06-05 20:59:10 杨航(282602809)
你也可以让它删除
2009-06-05 20:59:23 杨航(282602809)
很详细的哦
2009-06-05 20:59:20 杨航(282602809)
这方面资料,你可以找一找
2009-06-05 20:59:54 杨航(282602809)
不过你放心,你能想到的,肯定有解决方案
2009-06-05 21:00:02 ⑦零ゞ距离(76159179)
嗯,谢谢群主
2009-06-05 21:00:09 ⑦零ゞ距离(76159179)
解决了我很多困惑
2009-06-05 21:00:20 杨航(282602809)
呵呵
2009-06-05 21:00:28 ⑦零ゞ距离(76159179)
主要做这行较短
2009-06-05 21:00:31 ⑦零ゞ距离(76159179)
经验太少了
2009-06-05 21:00:36 杨航(282602809)
多长时间了?
2009-06-05 21:00:39 ⑦零ゞ距离(76159179)
缺乏大项目的锻炼
2009-06-05 21:00:40 ⑦零ゞ距离(76159179)
2年
2009-06-05 21:00:46 ⑦零ゞ距离(76159179)
都是做一些小的项目
2009-06-05 21:00:50 杨航(282602809)
哦
2009-06-05 21:01:19 杨航(282602809)
如果你的操作进行了死锁
2009-06-05 21:01:34 杨航(282602809)
不要在程序上挑毛病
2009-06-05 21:01:55 杨航(282602809)
一定要在架构中找瓶颈
2009-06-05 21:02:42 ⑦零ゞ距离(76159179)
是啊,我知道在架构中出了问题
2009-06-05 21:02:33 杨航(282602809)
把瓶颈部分挑出来,进行分布式处理或者等待处理
2009-06-05 21:03:00 ⑦零ゞ距离(76159179)
但是还没有很有效的解决方案
2009-06-05 21:03:39 杨航(282602809)
在大一些的,就要用分割数据库,进行分布式
2009-06-05 21:04:15 杨航(282602809)
就是用一个数据库进行对多个库索引
2009-06-05 21:04:32 杨航(282602809)
多个库的表结构都是一样的
2009-06-05 21:05:05 杨航(282602809)
这样每个库的承载量就小,压力就分散开来了
2009-06-05 21:04:01 杨航(282602809)
分布式数据库道理挺简单的
2009-06-05 21:05:29 杨航(282602809)
不需要
2009-06-05 21:05:45 杨航(282602809)
那还做什么分布式负载均衡啊
2009-06-05 21:05:50 ⑦零ゞ距离(76159179)
不需要的访问的时候怎么获得所有的数据
2009-06-05 21:05:03 ⑦零ゞ距离(76159179)
这样需不需要一个共同的库来保存所有的数据
2009-06-05 21:05:52 杨航(282602809)
那就拿那个库干被
2009-06-05 21:06:11 杨航(282602809)
这个你要考虑用户体验问题
2009-06-05 21:06:34 杨航(282602809)
比如,我想查一条信息
2009-06-05 21:06:57 杨航(282602809)
不是查一条,按一个条件去查
2009-06-05 21:07:06 ⑦零ゞ距离(76159179)
对啊
2009-06-05 21:07:14 ⑦零ゞ距离(76159179)
但是我不并不知道保持在什么库
2009-06-05 21:07:29 杨航(282602809)
通常我们的数据库表里经常进行条件查询的字段,都会做表索引吧?
2009-06-05 21:07:38 ⑦零ゞ距离(76159179)
会
2009-06-05 21:07:50 杨航(282602809)
比如,你用asp.net
2009-06-05 21:07:53 ⑦零ゞ距离(76159179)
但是放在不同的服务器
2009-06-05 21:07:58 杨航(282602809)
里面进行分页
2009-06-05 21:08:09 ⑦零ゞ距离(76159179)
系统也 没有那么智能啊
2009-06-05 21:08:27 杨航(282602809)
比如查到1000万条数据,你不会真的把1000万条直接给datasource然后databind吧?
2009-06-05 21:08:43 ⑦零ゞ距离(76159179)
没有
2009-06-05 21:08:49 ⑦零ゞ距离(76159179)
当然不会
2009-06-05 21:09:16 ⑦零ゞ距离(76159179)
我的意思是说如果这1000万分布在5个数据库的话
2009-06-05 21:09:22 杨航(282602809)
恩
2009-06-05 21:09:30 ⑦零ゞ距离(76159179)
那我要怎么查询呢
2009-06-05 21:09:49 杨航(282602809)
首先, 字段加索引了,count是很快的
2009-06-05 21:10:04 杨航(282602809)
你一下就知道共多少条数据了吧
2009-06-05 21:10:36 ⑦零ゞ距离(76159179)
一般查询的语句都是针对一个数据库的
2009-06-05 21:10:51 杨航(282602809)
你五个表,都可以是结构一样的
2009-06-05 21:10:50 ⑦零ゞ距离(76159179)
如果分布式的话,查询是怎么写得
2009-06-05 21:11:33 ⑦零ゞ距离(76159179)
我知道,是不是我查询的时候连上所有的服务器,然后count这些表
2009-06-05 21:11:38 杨航(282602809)
难道你想不通吗?
2009-06-05 21:11:44 杨航(282602809)
恩
2009-06-05 21:11:57 杨航(282602809)
首先是知道共多少条数据了吧?
2009-06-05 21:12:39 ⑦零ゞ距离(76159179)
啊,那样我每加一个服务器不是要去改sql语句
2009-06-05 21:12:56 杨航(282602809)
那就是你写程序习惯的问题了
2009-06-05 21:13:40 杨航(282602809)
如果写的够公用化,应该多一台服务器,只是多一个conn的问题
2009-06-05 21:14:15 ⑦零ゞ距离(76159179)
呵呵,不太清楚这个要怎么做
2009-06-05 21:14:30 杨航(282602809)
好
2009-06-05 21:14:32 杨航(282602809)
我引导你
2009-06-05 21:14:39 杨航(282602809)
首先
2009-06-05 21:15:05 杨航(282602809)
即使得到数据,也应该不是select全部吧
2009-06-05 21:15:14 ⑦零ゞ距离(76159179)
是
2009-06-05 21:15:14 杨航(282602809)
应该top多少多少吧
2009-06-05 21:15:23 ⑦零ゞ距离(76159179)
对
2009-06-05 21:15:29 杨航(282602809)
但是一共多少条知道吧
2009-06-05 21:15:43 杨航(282602809)
根据多少条应该知道一共多少页面吧
2009-06-05 21:16:17 ⑦零ゞ距离(76159179)
不是,我的意思是说我每次查询的时候是不是要连上所有的数据库服务器
2009-06-05 21:16:16 杨航(282602809)
知道多少条根据count是很快的吧
2009-06-05 21:16:22 杨航(282602809)
对呀
2009-06-05 21:16:27 杨航(282602809)
得连上啊
2009-06-05 21:16:34 ⑦零ゞ距离(76159179)
那要怎么连
2009-06-05 21:16:43 杨航(282602809)
这样
2009-06-05 21:16:43 ⑦零ゞ距离(76159179)
就是数据操作类要怎么设计呢
2009-06-05 21:16:58 ⑦零ゞ距离(76159179)
让我写的sql可以跟一台一样呢
2009-06-05 21:17:00 杨航(282602809)
你研究研究petshop这个框架好吧
2009-06-05 21:17:03 杨航(282602809)
你听说过吗?
2009-06-05 21:17:07 杨航(282602809)
petshop4
2009-06-05 21:17:11 ⑦零ゞ距离(76159179)
听说过
2009-06-05 21:17:27 ⑦零ゞ距离(76159179)
微软的sqlhelper有用过
2009-06-05 21:17:36 杨航(282602809)
你会不会泛型?
2009-06-05 21:18:19 ⑦零ゞ距离(76159179)
会
2009-06-05 21:18:26 杨航(282602809)
如果你没研究过泛型,建议研究研究先,可能我说的你没有概念
2009-06-05 21:18:34 杨航(282602809)
好
2009-06-05 21:18:44 杨航(282602809)
既然会的话,你看看petshop
2009-06-05 21:18:54 杨航(282602809)
应该比我嘴说的明白
2009-06-05 21:19:04 杨航(282602809)
具体有好多细节,我可能说不明白
2009-06-05 21:19:55 杨航(282602809)
既然有了泛型,那么不管你什么数据库过来的,什么表过来的,他是不是都可以给你构造成一个表对象
2009-06-05 21:20:01 杨航(282602809)
这你明白了吧
2009-06-05 21:20:04 ⑦零ゞ距离(76159179)
是的
2009-06-05 21:20:15 杨航(282602809)
你5个库过来的表
2009-06-05 21:20:29 杨航(282602809)
10个库,哪怕是另两个库是其他的数据库
2009-06-05 21:20:43 杨航(282602809)
构造到泛型里,都可以变成一个表
2009-06-05 21:21:04 ⑦零ゞ距离(76159179)
问题是我每次操作好像都只是操作一个连接
2009-06-05 21:21:13 杨航(282602809)
一共十条信息,有可能2条来自sql,有的来自oracle,有的来自其他
2009-06-05 21:21:31 杨航(282602809)
是啊
2009-06-05 21:21:57 杨航(282602809)
但是你可以把得出的表构造到泛型里啊
2009-06-05 21:22:47 杨航(282602809)
我问你
2009-06-05 21:22:55 ⑦零ゞ距离(76159179)
得出的表构造到泛型,是保持表结构,还是信息呢
2009-06-05 21:22:56 杨航(282602809)
有10条记录
2009-06-05 21:23:01 ⑦零ゞ距离(76159179)
嗯
2009-06-05 21:23:40 杨航(282602809)
分别要求从access里选5条,和sql里选5条,然后显示在一页里,他们有同样字段数,和字段意义
2009-06-05 21:23:48 杨航(282602809)
这个活你能干出来不?
2009-06-05 21:24:02 ⑦零ゞ距离(76159179)
能,但是我要事先知道
2009-06-05 21:24:27 杨航(282602809)
他们俩不就分布开了嘛?
2009-06-05 21:24:39 杨航(282602809)
明白原理啦?
2009-06-05 21:25:06 杨航(282602809)
而中间怎么选,这就要看你的中间程序怎么写
2009-06-05 21:25:13 杨航(282602809)
就相当于索引怎么索引了
2009-06-05 21:25:18 翔鸟(78255140)
要是排序,怎么办呢?
2009-06-05 21:25:34 ⑦零ゞ距离(76159179)
翔鸟问得好
2009-06-05 21:25:42 杨航(282602809)
字段加的索引,就是排序文件东西
2009-06-05 21:25:52 杨航(282602809)
数据库的原理是2叉数
2009-06-05 21:26:01 杨航(282602809)
折半查找原理
2009-06-05 21:26:04 ⑦零ゞ距离(76159179)
哦
2009-06-05 21:26:25 杨航(282602809)
要不你加索引文件,怎么查东西比一般快
2009-06-05 21:27:12 杨航(282602809)
而索引库,就是拿着他们的索引说事
2009-06-05 21:27:22 杨航(282602809)
拿着他们的索引上其他库里找
2009-06-05 21:27:29 杨航(282602809)
比如,你建立个表
2009-06-05 21:27:40 杨航(282602809)
表里有 姓名,性别,年龄字段
2009-06-05 21:27:47 ⑦零ゞ距离(76159179)
杨兄,你的意思时候说,如果分布式的话,我在操作数据库的话需要去构造一个连接集合,然后遍历集合,逐个连接,然后把得到的数据拼到一起对吗
2009-06-05 21:27:53 杨航(282602809)
你经常用姓名为关键字查找
2009-06-05 21:28:06 杨航(282602809)
恩
2009-06-05 21:28:17 杨航(282602809)
但是中间要有一个索引库
明白吗?
2009-06-05 21:28:16 ⑦零ゞ距离(76159179)
这样我明白了
2009-06-05 21:28:28 ⑦零ゞ距离(76159179)
索引库保存什么呢
2009-06-05 21:28:47 杨航(282602809)
目的是把所有索引字段内容进行大排序
2009-06-05 21:29:03 杨航(282602809)
然后根据索引找到是哪个库,哪行记录
2009-06-05 21:29:24 杨航(282602809)
我问你
2009-06-05 21:29:29 杨航(282602809)
你一个数据库
2009-06-05 21:29:34 ⑦零ゞ距离(76159179)
需要实时更新吗
2009-06-05 21:29:38 杨航(282602809)
一张表,你为什么要建立索引文件
2009-06-05 21:29:45 杨航(282602809)
对呀,得实施更新啊
2009-06-05 21:29:51 ⑦零ゞ距离(76159179)
加速查询
2009-06-05 21:30:07 杨航(282602809)
但你字段它加速查询的原理吗?
2009-06-05 21:30:21 ⑦零ゞ距离(76159179)
更新索引信息,还是把所有的字段数据放到索引库呢
2009-06-05 21:30:23 ⑦零ゞ距离(76159179)
不知道
2009-06-05 21:30:36 杨航(282602809)
你说对了一半
2009-06-05 21:31:02 杨航(282602809)
所谓索引文件,就是排序文件
2009-06-05 21:31:21 杨航(282602809)
比如,你弄个姓名字段,做索引
2009-06-05 21:31:41 ⑦零ゞ距离(76159179)
实际我做索引都是跟着事件探查器的结果让企业管理器去帮我生成
2009-06-05 21:31:42 杨航(282602809)
每当进行增删改时,就要对姓名的索引文件进行一次排序
2009-06-05 21:31:56 ⑦零ゞ距离(76159179)
所以我并不是 很清楚数据库索引需要怎么加
2009-06-05 21:32:01 ⑦零ゞ距离(76159179)
怎么设置才合理
2009-06-05 21:32:25 杨航(282602809)
哦,那个它一般就给你弄个累加id,目的 是唯一标识
2009-06-05 21:32:38 杨航(282602809)
索引文件,就是排序文件
2009-06-05 21:32:49 杨航(282602809)
目的就是为了进行折半查找用
2009-06-05 21:33:08 杨航(282602809)
数据结构你学过吧,折半查找原理就不用我说了吧
2009-06-05 21:33:17 ⑦零ゞ距离(76159179)
没有学过才糟糕啊
2009-06-05 21:33:21 ⑦零ゞ距离(76159179)
我不是科班出身的
2009-06-05 21:33:35 ⑦零ゞ距离(76159179)
数据结构最近才开始看
2009-06-05 21:33:40 杨航(282602809)
[表情]
2009-06-05 21:33:46 杨航(282602809)
原理是这样的
2009-06-05 21:33:29 ⑦零ゞ距离(76159179)
所以很多东西我是不懂
2009-06-05 21:34:14 杨航(282602809)
比如,1-10,10个数字,表示10个数值
2009-06-05 21:34:30 杨航(282602809)
比如我们插入的顺序是这样的
2009-06-05 21:34:39 ⑦零ゞ距离(76159179)
这个我知道
2009-06-05 21:34:44 杨航(282602809)
3 2 4 1 5 7 6 8 10 9
2009-06-05 21:35:04 杨航(282602809)
你知道什么?
2009-06-05 21:35:13 杨航(282602809)
折半查找原理?
2009-06-05 21:35:25 ⑦零ゞ距离(76159179)
在插入数据的时候,数据库会对id字段进行排序查找位置,然后插入
2009-06-05 21:35:29 ⑦零ゞ距离(76159179)
是这样吗
2009-06-05 21:35:35 ⑦零ゞ距离(76159179)
折半查找原理不知道
2009-06-05 21:35:49 杨航(282602809)
我跟你说的是折半查找原理
2009-06-05 21:35:58 ⑦零ゞ距离(76159179)
哦
2009-06-05 21:36:14 杨航(282602809)
比如正常一个字段,我们输入顺序是这样的
3 2 4 1 5 7 6 8 10 9
2009-06-05 21:36:18 ⑦零ゞ距离(76159179)
嗯
2009-06-05 21:36:47 杨航(282602809)
正常我们想找到8在哪,你怎么找
2009-06-05 21:36:44 ⑦零ゞ距离(76159179)
然后呢
2009-06-05 21:36:57 ⑦零ゞ距离(76159179)
一个个找
2009-06-05 21:36:58 杨航(282602809)
是不是得挨个验证一下啊
2009-06-05 21:37:03 ⑦零ゞ距离(76159179)
对
2009-06-05 21:37:06 杨航(282602809)
从头到尾
2009-06-05 21:37:15 ⑦零ゞ距离(76159179)
找到就不找了
2009-06-05 21:37:19 杨航(282602809)
对
2009-06-05 21:37:33 杨航(282602809)
这是10个数
2009-06-05 21:37:39 ⑦零ゞ距离(76159179)
是
2009-06-05 21:37:40 杨航(282602809)
1000万个数呢?
2009-06-05 21:37:45 ⑦零ゞ距离(76159179)
不行
2009-06-05 21:37:50 ⑦零ゞ距离(76159179)
这样就太慢了
2009-06-05 21:37:50 杨航(282602809)
是不是需要好长时间?
2009-06-05 21:37:53 ⑦零ゞ距离(76159179)
对
2009-06-05 21:37:59 杨航(282602809)
但你看这样
2009-06-05 21:38:07 杨航(282602809)
3 2 4 1 5 7 6 8 10 9
对他们进行排序
2009-06-05 21:38:18 杨航(282602809)
1 2 3 4 5 6 7 8 9 10
2009-06-05 21:38:30 杨航(282602809)
这是他们的顺序吧
2009-06-05 21:38:33 ⑦零ゞ距离(76159179)
是
2009-06-05 21:38:44 杨航(282602809)
排序顺序
2009-06-05 21:39:08 杨航(282602809)
我们应该很快就知道这是10条数据
2009-06-05 21:39:13 杨航(282602809)
这个没错吧
2009-06-05 21:39:31 ⑦零ゞ距离(76159179)
是
2009-06-05 21:39:48 杨航(282602809)
10条数据,10个位置
2009-06-05 21:40:04 杨航(282602809)
折半原理是除2比较大小
2009-06-05 21:40:14 杨航(282602809)
10/2=5吧
2009-06-05 21:40:41 ⑦零ゞ距离(76159179)
对
2009-06-05 21:40:43 杨航(282602809)
我用8与5这个位置上的数字比较
2009-06-05 21:40:49 杨航(282602809)
发现,大了
2009-06-05 21:40:55 杨航(282602809)
好
2009-06-05 21:41:06 ⑦零ゞ距离(76159179)
然后呢
2009-06-05 21:41:24 杨航(282602809)
那就很快判断它在5678910之间
2009-06-05 21:41:29 ⑦零ゞ距离(76159179)
对
2009-06-05 21:41:29 杨航(282602809)
而不是12345之间吧
2009-06-05 21:41:33 ⑦零ゞ距离(76159179)
嗯
2009-06-05 21:41:45 杨航(282602809)
然后5-10之间,中间的数是什么?
2009-06-05 21:41:57 ⑦零ゞ距离(76159179)
8
2009-06-05 21:42:09 杨航(282602809)
拿8比较,不就命中了嘛
2009-06-05 21:42:13 ⑦零ゞ距离(76159179)
嗯
2009-06-05 21:42:16 ⑦零ゞ距离(76159179)
明白了
2009-06-05 21:42:19 ⑦零ゞ距离(76159179)
谢谢群主
2009-06-05 21:42:22 ⑦零ゞ距离(76159179)
回去再聊
2009-06-05 21:42:24 杨航(282602809)
这个数量级越大
2009-06-05 21:42:30 ⑦零ゞ距离(76159179)
嗯
2009-06-05 21:42:29 杨航(282602809)
越显得块