首页 新闻 搜索 专区 学院

.net 怎么使用sqlserver读写分离?

0
悬赏园豆:5 [已解决问题] 解决于 2014-03-03 11:26

sqlserver 读写分离配好后, .net程序中 读 写,怎么结合使用啊?  一般写代码的方法是,修改或删除之后,要马上查询一次. 但 改 删 后,马上查,这时从数据库还没有同步过来呢.怎么办?

问题补充:

1)大表,有人建议拆表, 把一个表平行拆分成100个,  如果按时间查询,可以知道在哪个表里,

但如果按名称查询, 不知道在哪个表里的时候,怎么查啊. 例如 商品名称中含有 某个字的. 这种查询导致 把拆成的100个表,都要全查一次吗??

2)大表拆成100个表后, left join时, Join 100个中的哪一个表啊, 这种需求怎么办呀??

mick100ey的主页 mick100ey | 初学一级 | 园豆:75
提问于:2014-02-06 10:46
< >
分享
最佳答案
0

读写分离也可以直接用sql server 2012的always on,一个写,其它的读。系统直接帮你保证了同步的问题了。

收获园豆:5
ocean | 小虾三级 |园豆:824 | 2014-02-07 16:05

这个貌似是比较靠谱点的办法,但08 08r2怎么办...

mick100ey | 园豆:75 (初学一级) | 2014-02-07 19:43

@mick100ey: 升级就是了,sql server的兼容性非常好,还从来没出现过低版本的程序在高版本运行不了的情况。既然升级就能解决问题,又何必花费大量的精力自己做解决方案,而且关键是自己做的解决方案还不一定稳定。

ocean | 园豆:824 (小虾三级) | 2014-02-10 09:45

@ocean: 我现在直接装的2014 的,使用发布/订阅无法实现,因为数据库的快照系统找不到。。。。

alwayson又用不了,说是需要2012或者什么补丁,难道是我么可以安装完整吗?

异次元代码 | 园豆:101 (初学一级) | 2016-01-14 15:32
其他回答(7)
0

谁告诉你一般写代码的方法,修改或删除后,要马上查询一次?

如果你的数据库已经是高并发了,你还无缘无故给他增加负担,这是啥逻辑啊?

爱编程的大叔 | 园豆:30698 (高人七级) | 2014-02-06 15:40

写代码, 就是修改或删除完了 马上查的啊. 

例如有一个 table展示的数据,你删除一条,发现少了一行. 这后台代码作法就是调用完删除方法,再马上调用一次查询方法啊.

编辑也是同样的,update完后,调用select语句 查询展示结果的, 不是改完后马上要查吗???

( 只单次 修改 或删除, 不看结果的不在这次讨论范围哦,因为这样的改和查可以分开.)

支持(0) 反对(0) mick100ey | 园豆:75 (初学一级) | 2014-02-06 15:56

@mick100ey: 

这个需求我清楚,可是这种需求及界面设计,是基于并发不多的情况,并发多的话,就不要显示列表,或者不主动刷新,这是可以接受的,用户需要,可以自行刷新。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30698 (高人七级) | 2014-02-06 17:23
1

不需要这么麻烦,你只要知道修改或删除是否成功,用JS把前端数据改下,不需要重新拿全部数据.

happydaily | 园豆:674 (小虾三级) | 2014-02-06 16:10

在 Table 展示的数据中,删除一条分页中的数据,刚删除完,就得马上查询啊, 例如你删除第2页 第一条, 删除后第2页的数据 以 数据库中的数据为准啊.  只用js隐藏, 不查询, 第2页就少了一条啊, 下次用户一刷新 才能看到第2页重新查询的数据?

支持(0) 反对(0) mick100ey | 园豆:75 (初学一级) | 2014-02-06 17:28
0

我也是这么做,做了写(或者删除)操作后,就要重新查询一下,这样保证数据及时准确

还有更好的办法?

chanchaw | 园豆:65 (初学一级) | 2014-02-06 21:31

你可能没有错,楼主才是错了。

楼主假设了一个不可能的环境,求解答。

他先把读写分离了,然后要求零秒同步。

1、这个问题就和如何抓着自己的头发离地一样荒谬。

2、在小规模应用中,根本无需读写分离。为了用户需要,我也是修改完记录,刷新一下列表的。

3、如果要读写分离,需要在设计上、代码、分层等做一系列相应的调整。

4、只要是同步,就有延时,无延时的同步目前这个世界不存在。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30698 (高人七级) | 2014-02-07 13:38

@爱编程的大叔: 你是说 先同步,再分离吗?或者 是说 分离后,只能查询了?

我想解决查询效率啊, 索引方案用完后, 还是慢了, 得用传说中的读写分离啊,

问题是,分离后 ,怎么完成 删除一条后刷新结果的问题啊? 

支持(0) 反对(0) mick100ey | 园豆:75 (初学一级) | 2014-02-07 18:06

@mick100ey: 

我的意思是,你既然要分离,就不要设计要求删除后刷新的界面。

要么就不要分离。

你的项目不到100万吧,不要分离式设计。

你的项目超过1个亿吗?不要在这儿问。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30698 (高人七级) | 2014-02-07 18:41

@爱编程的大叔: 

只想找个删除后 刷新结果 的解决办法哦

支持(0) 反对(0) mick100ey | 园豆:75 (初学一级) | 2014-02-07 19:42

@爱编程的大叔: 

400G数据啊, 想整读写分离...

支持(0) 反对(0) mick100ey | 园豆:75 (初学一级) | 2014-02-07 19:45

@爱编程的大叔: 

难道超过1亿才能使用读写分离吗,只想找个解决方案哦...

支持(0) 反对(0) mick100ey | 园豆:75 (初学一级) | 2014-02-07 19:46

@爱编程的大叔: 千万级的(约两千万的数据),要不要分离呢?MSSQLSERVER数据库。这几天一直在找读写分离的资料,虽然提到的很多,但是更多是扯淡的。大叔有没有这方面的资料呢?指点指点

支持(0) 反对(0) 异次元代码 | 园豆:101 (初学一级) | 2016-01-14 15:36
0

请问,添加、删除或修改一条记录后,为什么需要基于表中的所有记录再做一次查询?

Launcher | 园豆:45045 (高人七级) | 2014-02-07 10:36

删除就是 删除了 要马上查一次啊, 大家都是这么做的. 

列表中 删除一条,删除完成后 再重新绑定一下数据源. 这时才能看到 删除一条呀.

常用的做法是 select() 方法 执行 查询数据, delete()方法删除数据.

先调用delete() 完成后,再调用select() 这时页面上能看到数据有变化,删除了一条.

例如 数据库中有5条,删除了一条, 还有4条, 不重新查,用户在页面上怎么看的见删除了没??? 

我这里的重点是疑惑在 "马上重新查询"上, 并不是"所有"哦,  可以查所有,只是分页了. 

如果一页能容纳下,删除一条后,重新绑定,就是在删除后,马上执行了查询操作呀

支持(0) 反对(0) mick100ey | 园豆:75 (初学一级) | 2014-02-07 10:44

添加,或删除一条后, 跳转到列表页吧?  删除和跳转是紧接着执行的.  时间间隔几乎为0, 没时间等 多个数据库复制完成呀. 这是当前问题的难点...

支持(0) 反对(0) mick100ey | 园豆:75 (初学一级) | 2014-02-07 10:47

页面操作删除, 后台执行的是删除数据库动作, 删除完后 页面需要看到结果, 就得马上查询呀, 这里重点是删除后马上要查询哦,我当前问题是说, 这两个动作是 串起来调用的.  如果做读写分离. 怎么分的开呀...

支持(0) 反对(0) mick100ey | 园豆:75 (初学一级) | 2014-02-07 10:51

@mick100ey: 我们先一个问题一个问题的说清楚,通过你的例子来了解下你的业务需求。

数据库中有 5 条记录,用户 A 通过页面 Page1 查询出这 5 条记录,然后用户 A 在页面 Page1 上删除一条记录,这时候数据库中就只有 4 条记录,这时候有两种做法,一种是重新查询一次数据库,另一种就是直接从页面 Page1 上移除刚才删除的数据记录。而你需要采用第一种方式的原因是因为,A 在做完删除后,认为数据库中应该是 4 条记录,但是,此时可能有 B 用户删除了另一个条记录,导致 A 虽然成功删除了一条数据,但是实际上数据库中现在只有 3 条记录。请问是不是这种清况?

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2014-02-07 10:56

@Launcher: 看题目哦, 说的是由于读写分离时, 删完后马上查的问题. 

你这种情况,查不查都可以, 但严格来说,应该要查的哦. 

你说的这种情况, 马上查, 或者不马上查, 结果都是一样的.因为数据己经在数据库了, 就算马上查, 也能查到正确的数据. 不会出现 删除成功后 ,查一次,被删除的数据又回来的情况

支持(0) 反对(0) mick100ey | 园豆:75 (初学一级) | 2014-02-07 11:00

@mick100ey: 真纠结。。。我只能表示遗憾。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2014-02-07 11:10
0

其它对于这样的场景在大并发时是很平常的,现在需要你这边这样一些信息,sql server是什么版本?读写分离采用的方案?数据库中的哪些数据采用了读写分离?是全部还是部分?业务处理与数据库间有没有缓存,或者队列方案?

amityat | 园豆:476 (菜鸟二级) | 2014-02-07 15:57

1)08 或 08r2, 

2)就一张表的话,

3)无缓存,队列

有解吗?只为解决删除后马上要查询原数据的问题, 

支持(0) 反对(0) mick100ey | 园豆:75 (初学一级) | 2014-02-07 18:11

@mick100ey: 如果没有缓存这样一些时间缓冲,那么,你的读写分离方案是如何做的?

支持(0) 反对(0) amityat | 园豆:476 (菜鸟二级) | 2014-02-08 16:13
0

Lucens,endica, solr等技术了

空明流光 | 园豆:62 (初学一级) | 2014-02-08 22:46
0

你的问题,最后你找到解决方案了吗

anech | 园豆:92 (初学一级) | 2016-10-19 11:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册