11 | NoSQL:在高并发场景下,数据库和NoSQL如何做到互补?
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
在高并发场景下,数据库和NoSQL如何互补?本文深入探讨了在高并发和大流量情况下,如何充分利用NoSQL数据库与传统关系型数据库相辅相成,共同应对数据存储服务的挑战。首先介绍了NoSQL数据库的多种类型,包括KV存储、列式存储数据库和文档型数据库,并重点阐述了NoSQL数据库如何通过算法提升写入性能。文章还详细说明了NoSQL数据库在某些场景下作为传统关系型数据库的补充,如使用倒排索引实现全文搜索服务。此外,还介绍了NoSQL数据库在性能和扩展性方面的优势,以及其特殊功能特性,包括Replica、Shard和负载均衡等。总的来说,本文全面阐述了NoSQL数据库在高并发场景下与传统数据库的互补作用,为读者提供了宝贵的技术知识。文章提醒读者在选择NoSQL数据库时需要深入了解其实现原理,并具备一定的运维能力,以避免可能出现的故障和问题。最后,鼓励读者分享自己在日常工作中使用NoSQL数据库的经验,以及在选型时的考虑。
《高并发系统设计 40 问》,新⼈⾸单¥59
全部留言(62)
- 最新
- 精选
- Richeir置顶这一节学到了很多新东西,感谢唐老师的总结!2019-10-11420
- 无形之前在讲座业务重构中,用es查询数据,其他组的小伙伴维护的es,但是es性能不行,where条件里七八个字段,排序两个字段,查询es基本两千左右QPS,难以支撑支撑十几万人的直播讲座,而且直播人数增长很快,es已经成为了性能瓶颈,查询条件是类标签的,比如几年级,哪个学科,直播类型,还有时间类的,对于这些字段我是可以打标签的,还有开始时间、结束时间,根据类标签的查询特点,我使用了倒排索引+ roaring bitmap 来过滤,使用快速排序对多字段进行排序。使用类延时队列来完成时间的检索。整个检索过程在微秒级,而且对查询的结果做了缓存,查询条件相同的直接从缓存中取,避免了重复检索和排序,查询缓存会在讲座下次修改,更新倒排索引之后清空。重建查询缓存。重构完讲座的检索性能达到了几十倍的性能提升
作者回复: 👍👍👍
2019-11-011970 - yaomon目前的项目就是 MySql 配合 Elasticsearch 使用。Elasticsearch主要是做搜索用,写还是 MySql,同时发Kafka消息,消费端写ES。ES存在丢数据的问题,所以会定时全量/增量从 MySql 中捞数据,覆写 ES,保证数据的一直性。
作者回复: 是的 应该是这样
2019-10-11740 - Y老师你好 业务中有个模块写极多读少,这种情况下是不是直接把这个数据拆分出来用单独nosql存储比较好?还是先写到nosql,再慢写到mysql好? 如果慢写到mysql一是可能会出现数据不一致问题,二是写请求会积累很多,内存型nosql支撑不住,可能要用leveldb之类的,磁盘多了一份数据,等要迁移的时候又增加了运维管理成本
作者回复: 如果是长期都是写多读少,那么可以考虑nosql 如果是瞬时峰值的话,还是用消息队列削峰填谷
2019-10-3012 - jc9090kkk感谢老师分享,对于文中的知识点有一些疑问,希望老师能解答下: 1.采用LSM树的nosql,跟mysql的WAL机制类似,mysql通过redo log和bin log的两阶段提交来保证数据的crash-safe,那么nosql的日志是用来做什么呢?也是为了做数据恢复的吗? 2.像Hbase这样的nosql,涉及的初衷应该是为了做统计而设计的,它支持事务吗?如果支持的话,使用场景是什么?事务的隔离级别都有哪些?因为以我的理解,统计业务,基本都是读请求,很少有写请求,用事务的场景应该极少吧? 3.因为nosql相比传统的关系型数据库来说,拓展性更好,那么就更适合做分布式系统?后期老师有想法讲一讲比如类似redis或者mongoDB这样的系统,分布式系统的一些实际经验或者说踩过什么坑么?很想了解下。。。 思考问题: 公司现在用的nosql包括Redis,ES,Kafka,ClickHouse,采用Redis是用来做cache和秒杀活动,也会有一些异步化的处理,采用Kafka+ES是一是为了采集业务端用户行为,二是ES+Kibana可以提供可视化的数据分析平台供运营部门使用,而且ES在后期的水平拓展的方案上来讲配置和维护比较简单(相比Sphinx而言),为什么采用是因为公司之前接的是第三方的数据统计平台,后期发现统计需要单独定制而且会污染业务代码不好维护,而且有时候会发现数据日志还有丢失的情况导致数据统计异常,所以采用Kafka+ES一起来支撑,从而将业务端的一些耦合较重的埋点逻辑分离出去便于维护,CLickHouse主要是为了生成一些离线的数据报表。
作者回复: 1. LSM使用WAL也是为了恢复memtable的数据的 2. 是不涉及事务的 3. 好的呀~
2019-10-1129 - Liush老师你好: 其实我对什么时候使用SQL,NOSQL,或者是NEWSQL一直存在很多疑问,就比如微博来说,每天微博增加的博文数量应该是非常大的,如果这部分用关系型数据库来存储是不是分库会很快达到瓶颈?这样会造成重新迁移分布数据,如果手动去迁移分布这部分数据,由于存在大量的历史数据迁移时间是否又是一个问题呢?像微博博文这部分是存储在SQL中还是NOSQL中?如果用nosql的话后续只要简单的将节点加入集群即可,auto sharding的特性会方便很多。如果按照我的理解在电商领域中,订单是核心系统,而且和订单系统关联的商品等数据,这部分使用关系型数据库分库分表的方式去处理,因为这部分系统需要保证事务,但是像商品详情这部分并不需要强事务的数据是否可以存储在NOSQL中?谢谢
作者回复: 微博的博文是放在MySQL里面的,其实博文的数量没有关系那么夸张,而且热点明显,用户很少会翻之前的微博。 订单的数据可能和博文的数据相当,我觉得放在mysql中应该就够了
2019-10-1425 - 饭团老师,再问个问题!如果一类数据需要在nosql和关系形数据库都存储,需要存2次吗?现实开发中这样的情况多吗?能举个例子吗?
作者回复: 是的呀 比如你的业务数据放在mysql,索引数据放在es
2019-10-1125 - 饭团老师,是不是这个意思: 首先不管是sql数据库还是nosql数据库,提升写性能都是靠的将随机写转化为顺序写!在这方面mysql使用WAL机制已经做的很好了!但是关系形数据库主要是在扩展性方面有缺陷!相对于除了kv型的nosql数据库,其他类型的和mysql性能都差不多! 感觉mysql主要是在扩展性上有所欠缺!
作者回复: benchmark结果来看,nosql的写入性能要好一些
2019-10-1125 - 钱目前REDIS/ES/MQ基本是标配,具体使用那个确实需要深入了解每个存储系统的特性和优劣势,这样才能扬长避短,深入了解需要时间和精力,不过干IT就需要一直学习。老师讲的本就是科普的,这些存储系统那个深入理解都需要花费许多的时间和精力,也有对应的专栏在。不过听听,总会有所受益的。
作者回复: 赞👍
2020-04-144 - 长期规划老师,MongoDB从4.0之后已经支持多文档事务了。之前谈到MySQL与MongoDB,都说当使用事务时,要用MySQL,但现在MySQL对MongoDB的优势已经随着MongoDB的进化而基本没有了,而MongoDB在可用性,可扩展性方面完胜MySQL,我感觉都没有使用MySQL的必要了。不知道这种看法是否正确
作者回复: 只是如果没有大规模使用和维护mongodb的经验,还是不敢使用的。MySQL毕竟无论是在社区还是在普及度上会更好,从招人上也能看出,熟悉MySQL的DBA比熟悉MongoDB的DBA要多很多
2019-12-2244