sqlserver 读写分离配好后, .net程序中 读 写,怎么结合使用啊? 一般写代码的方法是,修改或删除之后,要马上查询一次. 但 改 删 后,马上查,这时从数据库还没有同步过来呢.怎么办?
1)大表,有人建议拆表, 把一个表平行拆分成100个, 如果按时间查询,可以知道在哪个表里,
但如果按名称查询, 不知道在哪个表里的时候,怎么查啊. 例如 商品名称中含有 某个字的. 这种查询导致 把拆成的100个表,都要全查一次吗??
2)大表拆成100个表后, left join时, Join 100个中的哪一个表啊, 这种需求怎么办呀??
读写分离也可以直接用sql server 2012的always on,一个写,其它的读。系统直接帮你保证了同步的问题了。
这个貌似是比较靠谱点的办法,但08 08r2怎么办...
@mick100ey: 升级就是了,sql server的兼容性非常好,还从来没出现过低版本的程序在高版本运行不了的情况。既然升级就能解决问题,又何必花费大量的精力自己做解决方案,而且关键是自己做的解决方案还不一定稳定。
@ocean: 我现在直接装的2014 的,使用发布/订阅无法实现,因为数据库的快照系统找不到。。。。
alwayson又用不了,说是需要2012或者什么补丁,难道是我么可以安装完整吗?
谁告诉你一般写代码的方法,修改或删除后,要马上查询一次?
如果你的数据库已经是高并发了,你还无缘无故给他增加负担,这是啥逻辑啊?
写代码, 就是修改或删除完了 马上查的啊.
例如有一个 table展示的数据,你删除一条,发现少了一行. 这后台代码作法就是调用完删除方法,再马上调用一次查询方法啊.
编辑也是同样的,update完后,调用select语句 查询展示结果的, 不是改完后马上要查吗???
( 只单次 修改 或删除, 不看结果的不在这次讨论范围哦,因为这样的改和查可以分开.)
@mick100ey:
这个需求我清楚,可是这种需求及界面设计,是基于并发不多的情况,并发多的话,就不要显示列表,或者不主动刷新,这是可以接受的,用户需要,可以自行刷新。
不需要这么麻烦,你只要知道修改或删除是否成功,用JS把前端数据改下,不需要重新拿全部数据.
在 Table 展示的数据中,删除一条分页中的数据,刚删除完,就得马上查询啊, 例如你删除第2页 第一条, 删除后第2页的数据 以 数据库中的数据为准啊. 只用js隐藏, 不查询, 第2页就少了一条啊, 下次用户一刷新 才能看到第2页重新查询的数据?
我也是这么做,做了写(或者删除)操作后,就要重新查询一下,这样保证数据及时准确
还有更好的办法?
你可能没有错,楼主才是错了。
楼主假设了一个不可能的环境,求解答。
他先把读写分离了,然后要求零秒同步。
1、这个问题就和如何抓着自己的头发离地一样荒谬。
2、在小规模应用中,根本无需读写分离。为了用户需要,我也是修改完记录,刷新一下列表的。
3、如果要读写分离,需要在设计上、代码、分层等做一系列相应的调整。
4、只要是同步,就有延时,无延时的同步目前这个世界不存在。
@爱编程的大叔: 你是说 先同步,再分离吗?或者 是说 分离后,只能查询了?
我想解决查询效率啊, 索引方案用完后, 还是慢了, 得用传说中的读写分离啊,
问题是,分离后 ,怎么完成 删除一条后刷新结果的问题啊?
@mick100ey:
我的意思是,你既然要分离,就不要设计要求删除后刷新的界面。
要么就不要分离。
你的项目不到100万吧,不要分离式设计。
你的项目超过1个亿吗?不要在这儿问。
@爱编程的大叔:
只想找个删除后 刷新结果 的解决办法哦
@爱编程的大叔:
400G数据啊, 想整读写分离...
@爱编程的大叔:
难道超过1亿才能使用读写分离吗,只想找个解决方案哦...
@爱编程的大叔: 千万级的(约两千万的数据),要不要分离呢?MSSQLSERVER数据库。这几天一直在找读写分离的资料,虽然提到的很多,但是更多是扯淡的。大叔有没有这方面的资料呢?指点指点。
请问,添加、删除或修改一条记录后,为什么需要基于表中的所有记录再做一次查询?
删除就是 删除了 要马上查一次啊, 大家都是这么做的.
列表中 删除一条,删除完成后 再重新绑定一下数据源. 这时才能看到 删除一条呀.
常用的做法是 select() 方法 执行 查询数据, delete()方法删除数据.
先调用delete() 完成后,再调用select() 这时页面上能看到数据有变化,删除了一条.
例如 数据库中有5条,删除了一条, 还有4条, 不重新查,用户在页面上怎么看的见删除了没???
我这里的重点是疑惑在 "马上重新查询"上, 并不是"所有"哦, 可以查所有,只是分页了.
如果一页能容纳下,删除一条后,重新绑定,就是在删除后,马上执行了查询操作呀
添加,或删除一条后, 跳转到列表页吧? 删除和跳转是紧接着执行的. 时间间隔几乎为0, 没时间等 多个数据库复制完成呀. 这是当前问题的难点...
页面操作删除, 后台执行的是删除数据库动作, 删除完后 页面需要看到结果, 就得马上查询呀, 这里重点是删除后马上要查询哦,我当前问题是说, 这两个动作是 串起来调用的. 如果做读写分离. 怎么分的开呀...
@mick100ey: 我们先一个问题一个问题的说清楚,通过你的例子来了解下你的业务需求。
数据库中有 5 条记录,用户 A 通过页面 Page1 查询出这 5 条记录,然后用户 A 在页面 Page1 上删除一条记录,这时候数据库中就只有 4 条记录,这时候有两种做法,一种是重新查询一次数据库,另一种就是直接从页面 Page1 上移除刚才删除的数据记录。而你需要采用第一种方式的原因是因为,A 在做完删除后,认为数据库中应该是 4 条记录,但是,此时可能有 B 用户删除了另一个条记录,导致 A 虽然成功删除了一条数据,但是实际上数据库中现在只有 3 条记录。请问是不是这种清况?
@Launcher: 看题目哦, 说的是由于读写分离时, 删完后马上查的问题.
你这种情况,查不查都可以, 但严格来说,应该要查的哦.
你说的这种情况, 马上查, 或者不马上查, 结果都是一样的.因为数据己经在数据库了, 就算马上查, 也能查到正确的数据. 不会出现 删除成功后 ,查一次,被删除的数据又回来的情况
@mick100ey: 真纠结。。。我只能表示遗憾。
其它对于这样的场景在大并发时是很平常的,现在需要你这边这样一些信息,sql server是什么版本?读写分离采用的方案?数据库中的哪些数据采用了读写分离?是全部还是部分?业务处理与数据库间有没有缓存,或者队列方案?
1)08 或 08r2,
2)就一张表的话,
3)无缓存,队列
有解吗?只为解决删除后马上要查询原数据的问题,
@mick100ey: 如果没有缓存这样一些时间缓冲,那么,你的读写分离方案是如何做的?
Lucens,endica, solr等技术了
你的问题,最后你找到解决方案了吗