.net 高可用性,高并发疑问

d383137359 2019-03-15 09:31:34
环境:vs + sql server

疑问:
1. 一台数据库服务器的情况下,同一个库,程序里用两个连接字符串实现读写分离。这样会提高数据操作的效率吗?必竟同一个库,同一台电脑配置,是不是这种情况下与使用一个字符串连接操作数据库效率差不多?

2. 一台数据库服务器的情况下,大表弄成多个分区表,读写效率提高不明显呢?甚至可以说是一点感觉都没有。

3. 主从数据库数据同步AlwaysOn方式是最佳选择?

4. 云数据库读写效率会比本地数据库读写效率高吗? 与本地数据库服务器配置相同的情况下,不考虑带宽影响。据说云数据库本身有读写分离的实现?同一连接字符串他能区分?

...全文
2258 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
BillHu233 2019-08-21
  • 打赏
  • 举报
回复
我寻思着,一台服务器同一个数据库,两个字符串,两个dbcontext, 难道连接池就不是同一个了?

题主你根本没搞明白数据库连接方式哦

大表分成多个小表查速度会有一些提高

总之一台服务器在 数据量特别大的情况下, 除了稍微的优化一下之外, 基本莫得搞

等你有机会接触多台数据库多服务器, 集群分布式的时候再来考虑这些问题吧
xuan.ye 2019-03-28
  • 打赏
  • 举报
回复
环境:vs + sql server 疑问: 1. 一台数据库服务器的情况下,同一个库,程序里用两个连接字符串实现读写分离。这样会提高数据操作的效率吗?必竟同一个库,同一台电脑配置,是不是这种情况下与使用一个字符串连接操作数据库效率差不多? --------------------------------------------------------------------------------------- 1、“瓶颈”需要考虑数据库服务器的IO问题、网络; 2、读写分离不是客户端(c#/c++)来进行的。 2. 一台数据库服务器的情况下,大表弄成多个分区表,读写效率提高不明显呢?甚至可以说是一点感觉都没有。 ----------------------------------------------------------------------------------------- 分表会提高读写效率的 3. 主从数据库数据同步AlwaysOn方式是最佳选择? ----------------------------------------------------- linux环境和windows环境还有其他环境有差异,不好说 4. 云数据库读写效率会比本地数据库读写效率高吗? 与本地数据库服务器配置相同的情况下,不考虑带宽影响。据说云数据库本身有读写分离的实现?同一连接字符串他能区分? ----------------------------------------------------- 云数据库读写效率取决于IO和网络; 云数据库提供商并不负责效率和读写分离; 同一连接字符串和本地无区别。 云和本地没有太大区别,代码写的不好一样会出问题,也并没有特殊机制进行优化。
丰云 2019-03-25
  • 打赏
  • 举报
回复
分区表不是随便把数据分到几个子表就完事,必须是对应相关业务,有序分表,才能体现效率提升!! 举例来说,比如电商系统,订单数据非常多,根据实际情况,可以选择商品类型分表或按店铺分表等,实际看哪种业务需求大,就按哪种方案分表,然后代码里就根据分表规则分流查询读写,这样才能起到效率提升的效果。。。。 软件编程发展到现在,绝大部分业务都有成熟解决方案,不要自以为是的瞎搞搞,做之前,先查查资料,搞明白原理,想好了再动手。。。
丰云 2019-03-25
  • 打赏
  • 举报
回复
两个连接字符串实现读写分离。。。。 这脑洞我服。。。
丰云 2019-03-25
  • 打赏
  • 举报
回复
这问题问得很无语。。。 完全新人的感觉。。。 但新人会需要考虑效率之类的问题吗。。。 会承担系统优化的任务吗。。。
女兆木木 2019-03-22
  • 打赏
  • 举报
回复
引用 3 楼 以专业开发人员为伍 的回复:
[quote=引用 楼主 d383137359 的回复:]
环境:vs + sql server

疑问:
1. 一台数据库服务器的情况下,同一个库,程序里用两个连接字符串实现读写分离。这样会提高数据操作的效率吗?必竟同一个库,同一台电脑配置,是不是这种情况下与使用一个字符串连接操作数据库效率差不多?
[/quote]
我和我的小伙伴都惊呆了
  • 打赏
  • 举报
回复
我觉得 现在的都是写少 读多, 数据库分离是为了提高读的性能。 那就应该先考虑缓存 , 服务器 读出 数据库的内容放入缓存, 用户在操作的时候 同时插入数据库 和追加缓存 , 缓存读不到 在走数据库 这样 数据库 就只有写入 没有读取, 而缓存读取又很快 比如他们说的Redis。 如果这样还不行 就考虑 按某种规律 分表, 大量数据的话, 一年一份表, 也会提高读取速度 同样要加缓存一起使用。 如果这还不行 才是数据分离 + 分表 +缓存。 这个是我个人 对数据库理解。 还望指教
  • 打赏
  • 举报
回复
我觉得 现在的都是写少 读多, 数据库分离是为了提高读的性能。
编程有钱人了 2019-03-18
  • 打赏
  • 举报
回复
如果是还是搞不清楚读写分离,你先用Redis把,具体教程博客园里很多,起码能提高效率!
SoulRed 2019-03-16
  • 打赏
  • 举报
回复
如果真想提高效率和速度。建议用类似redis内存数据库进行关键热点数据的缓存,效率提高至少十倍。 你说的那个不适合单机小项目。
  • 打赏
  • 举报
回复
当然啦,表面上看,多说点高大上的名词儿最唬人。但是根据自己的实践能力来设计,选择最适合自己的概念,不要追时髦。
  • 打赏
  • 举报
回复
“一台服务器”并且“同一个数据库”系统,实际上对于基本的满脑子只有数据库的人来说,其实是“效率最高的了”。在仍然使满脑子还是只有数据库的时候,也就是设计上不存在真正的并发分布式面向对象编程设计架构思路的时候,满脑子只知道“增删改查”编程的时候,多个数据库、主从备份、分区,等等概念,不但增加数据不一致的负担和额外管理性能损失,增加用户开支并且基本上无性能提高。此时仅仅会“对一个数据库”进行维护可能最能维护你在用户那里的声誉。
  • 打赏
  • 举报
回复
引用 15 楼 d383137359 的回复:
[quote=引用 10 楼 以专业开发人员为伍 的回复:] 两个连接字符串(比如说在第一个字符串结尾加入一个空格就成了第二个连接串了!),实际上用的是同一个数据库,这怎么叫作“实现读写分离”啊?如果这都叫做实现读写分离,那么用一个连接串就能实现读写分离了,用不着两个字符串。
不是,我可以用两个dbcontext实例。凡是读操作指定用一个实例,凡是写和更新操作用另一个实例[/quote] 用两个 dbcontext 对象还是两个数据库?这个到底有没有清楚?
  • 打赏
  • 举报
回复
引用 2 楼 d383137359 的回复:
[quote=引用 1 楼 md5e 的回复:] 你先了解一下服务器架构的知识吧,要实现数所库读、写分离,是一台主(写),多台备(快照、只读)的情况下使用的,在没有多个数据库的条件下可以多使用缓存+多应用负载来实现高并发
就是了解到这种高并发得多台数据库服务器主从备份才能提高性能。一台数据库的情况下好像这些操作都没意义。[/quote] 不论主从还是分片,在单机上都是用来“玩儿”的,并不是用来实用的。而那些用得起并且必须用集群的人才会了解这样做的效益。
  • 打赏
  • 举报
回复
考虑“一台数据库服务器的情况下”的时候,给用户别说奇怪的高大上的数据库概念。基本上可以肯定,你使用了那些在较大集群上适用的“技术”在你的“一台数据库服务器的情况下”来用,我相信不论自己维护还是用户维护都会很悲惨!
吉普赛的歌 2019-03-16
  • 打赏
  • 举报
回复
引用 楼主 d383137359 的回复:
环境:vs + sql server 疑问: 1. 一台数据库服务器的情况下,同一个库,程序里用两个连接字符串实现读写分离。这样会提高数据操作的效率吗?必竟同一个库,同一台电脑配置,是不是这种情况下与使用一个字符串连接操作数据库效率差不多? 2. 一台数据库服务器的情况下,大表弄成多个分区表,读写效率提高不明显呢?甚至可以说是一点感觉都没有。 3. 主从数据库数据同步AlwaysOn方式是最佳选择? 4. 云数据库读写效率会比本地数据库读写效率高吗? 与本地数据库服务器配置相同的情况下,不考虑带宽影响。据说云数据库本身有读写分离的实现?同一连接字符串他能区分?
1. 一台服务器, 同一个库, 用两个连接串读写分离就是骗自己, 不会有任何提高。 2. 分区表只有在分多个物理文件,而且多个物理文件在不同的硬盘上才会有高并发读的优势, 但一般服务器不会提供多块硬盘给你。你没多硬盘,也没做分区表多文件,当然没任何改善。 3. 是的。至少在 SQL Server 这个是最佳选择,因为是比较新的技术,我司用过几年了效果非常不错。如果你用 Alwayson 来做读写分离, 对实时要求比较高的连接串指向主库, 实时性要求不高的(允许1秒左右的延迟)只读连接串指向从库,这个对分散数据库的高并发读压力是非常有用的(负载均衡)。如果你用 .net 4.5 或更高版本,可以用同一个连接串,读写另外加一个参数即可。 4. 用过一些云服务器, 大部分的IO是比较差的。至于说能直接实现读写分离,看人家是怎么承诺了。至少在数据安全方面比自己搭建会有保障一些吧。
wanghui0380 2019-03-15
  • 打赏
  • 举报
回复
高可用-----指可用随时热替换掉已经无法响应的节点
高并发-----指快速切换操作共享资源的能力

这两个的主题是:节点维护,数据一致性维护。

在这个两个前提下我们在回答你的问题
1.可以是两个连接字符串,甚至可以是N个连接字符串,但请注意不是一个库。读写分离只的是主库写,副本读。(主副切换灾难切换看配置和策略)
2.分区表不在这两个讨论中,他只是提高查询命中率,不在这个主题讨论范围中。
3.主副本应保持数据一致性,否则会造成版本不一致,提交回撤。反而低下
4.云数据库只是在云放的,至于人家用不用群集,用什么群集,怎么保证数据一致性那是人家的事情。你还不是可以放个单点mssql到阿里云上,那这个“云数据库”有啥意义?
  • 打赏
  • 举报
回复
1、读写分离是从数据源头就进行分离,当然你代码里面区分,实际并不做区分本质是没问题的,这样就和写一个配置没任何区别,只能说你程序支持读写分离 2、分区表是和你的查询条件有关的,如果条件不符当然没用(比如你按日期分区的,结果你查询时是按金额查的) 3、这个实际情况实际分析 4、云和本地有什么区别?影响数据库读写效率的不就是IO么?假设cpu内存之类的性能完全一致情况下
d383137359 2019-03-15
  • 打赏
  • 举报
回复
引用 4 楼 peng2739956 的回复:
楼主的想法 让我很是惊讶。同一个库实现读写分离。一台服务器实现分表分库?不存在的。如果这都能实现。那些大网站数据库何必得搞个机房来存储。
你有试过同一个库分表的效率对比吗?有试过两个连接操作数据的效率对比吗?有试过分区分表的效率对比么?多台服务器都知道能提高效率,有啥好惊讶的
d383137359 2019-03-15
  • 打赏
  • 举报
回复
引用 5 楼 md5e 的回复:
不管是单数据库,还是多数所库的架构,要想高并发,高可用,缓存服务器是不可少的,多数所库只是在缓存上的锦上添花的效果,更多时候应用都得依靠缓存,CDN的构架说白了就是缓存技术的应用
mark,学习了。
加载更多回复(18)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧