常见后端数据存储问题解决方案

这篇具有很好参考价值的文章主要介绍了常见后端数据存储问题解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、mysql数据准确性

       常见电商系统中,如订单服务、现金券服务、活动类服务等,这类服务中经常会出现一些并发更新数据的情况,如何保证数据准确性。虽然有些操作可通过"状态"字段做了类似乐观锁的处理。但理论上还是会出现ABA的问题,而且规则不够统一,不同业务可能情况不太一样。可以考虑通过加入在数据库中加入"版本号"统一处理,通过注解的形式,把这部分代码抽象出来。

2、性能优化--缓存的使用

  • 大量数据直接查询数据库性能较差,可以考虑将更多数据放入redis,提升查询性能
  • 使用redis做重要业务时,注意避免mysql与redis数据不一致影响
  • redis是单线程的,这是它的一大优点,但有时候也会成为问题来源,如一些耗时较长的操作会造成redis阻塞,对整个系统的稳定性造成影响

3、性能优化--分库分表

       对于一些数据量很大的表,sql层面再怎么优化,依然解决不了查询慢的问题。这是因为随着数据量的增加,索引树的深度会增加。加之有些查询数据的区分度不高。在sql层面去优化是解决不了这类问题的。这时可以考虑引入分库分表的方案了。mysql一般5kw左右就可以考虑分表了。核心思路就是根据业务特点把数据分不同的表存储,以此提升数据查询性能。常见的方案有按时间维度(年、月)分表,按用户id维度分表

4、性能优化--冷热数据

常用的数据存储中,有些表虽然数据量比较大,但业务上真正常用的就是近一年,或者半年的数据。这些常用的数据称为热数据,不常用的为冷数据。根据分而冶之的思想,将冷热数据分开存储。这样在热数据查询上可以获得更好的性能,同时冷数据可以选用便宜的存储设备,降低成本。例如elasticsearch中仅保存近一年的数据,其它数据换作mysql存储。这样elasticsearch中的数据量将减少,查询时速度更快,同时减小数据容量,降低成本。

5、不停服切换数据源

如上如果采用冷热数据分离的方式存储elasticsearch中的数据,或者引入分表的方案,那将涉及到数据迁移。如何做到不停服切换数据源,且出现较大问题后能马上切换到原有方案,将是整个方案的重点之一。

常见后端数据存储问题解决方案

 常见后端数据存储问题解决方案

总结:数据存储没有完美、通用的解决方案,大多是根据不同的业务场景,有不同的处理方式,总结起来有如下方向

空间换时间多保存数据副本,分担数据查询压力

常用案例:

主从复制(mysql主从、redis主从)

异构数据(elasticsearch + cannal数据同步 ,elasticsearch + 消息队列数据同步)

分而冶之:根据数据特点,按一定的逻辑将数据分开存储,从而获得性能上的提升

垂直拆分:微服务,按业务领域分库。。。

水平拆分:多租户分库、按时间维度分表、按用户维度分表。。。

非关系型数据库: Elasticsearch  、Redis。。。文章来源地址https://www.toymoban.com/news/detail-417634.html

到了这里,关于常见后端数据存储问题解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RocketMQ常见问题及解决方案

    RocketMQ FAQ 可能原因 1)消费端处理消息发生异常没有捕获或是因为其他原因,没有返回消费状态 解决方案: 消费端捕获异常, 如果需要重试,返回ConsumeConcurrentlyStatus. RECONSUME_LATER , 如果不需要重试,返回ConsumeConcurrentlyStatus. RECONSUME_SUCCESS 可以在消费端增加重试次数判断,

    2023年04月08日
    浏览(34)
  • RabbitMQ常见问题及其解决方案

    目录 RabbitMQ如何保证顺序消费 RabbitMQ消息丢失及其解决方案 RabbitMQ如何保证顺序消费 RabbitMQ重复消费及其解决方案 RabbitMQ如何保证不重复消费 RabbitMQ消息积压及其解决方案 RabbitMQ如何实现分布式事务以及保障消息最终一致性 在 RabbitMQ 中实现顺序消费可以考虑以下方法: 单一

    2024年02月09日
    浏览(29)
  • RabbitMQ常见问题及解决方案

    目录 一、消息丢失 1、生产者重连 2、生产者确认 3、数据持久化 4、惰性队列 5、消费失败处理 二、消息重复 1、通过业务保证幂等性(优先) 2、通过消息状态去重保证幂等性 三、消息堆积 1、优化消费者处理逻辑 2、增加队列及消费者数量 3、使用惰性队列 四、保证消息顺

    2024年02月03日
    浏览(28)
  • RabbitMQ详解与常见问题解决方案

    RabbitMQ 是一个开源的消息中间件,使用 Erlang 语言开发。这种语言天生非常适合分布式场景,RabbitMQ 也就非常适用于在分布式应用程序之间传递消息。RabbitMQ 有非常多显著的特点: 消息传递模式 :RabbitMQ 支持多种消息传递模式,包括发布/订阅、点对点和工作队列等,使其更

    2024年03月15日
    浏览(57)
  • HBase实际应用中常见的问题 解决方案

    HBase 是一个分布式的、面向列的开源数据库,通常用于处理大规模数据。在实际应用中,可能会遇到一些常见问题,以下是一些常见问题及其解决方案: 性能问题 : 问题 :HBase 性能下降,读写延迟增加。 解决方案 :可以通过增加 Region Server、优化 HDFS、调整 HBase 配置参数

    2024年01月19日
    浏览(30)
  • vlc option以及常见问题解决方案

    2024年02月08日
    浏览(195)
  • SpringBoot —— 整合RabbitMQ常见问题及解决方案

    企业中最常用的消息中间件既不是RocketMQ,也不是Kafka,而是RabbitMQ。 RocketMQ很强大,但主要是阿里推广自己的云产品而开源出来的一款消息队列,其实中小企业用RocketMQ的没有想象中那么多。 至于Kafka,主要还是用在大数据和日志采集方面,除了一些公司有特定的需求会使用

    2023年04月12日
    浏览(72)
  • 微信小程序:小程序常见问题及解决方案

    在小程序中使用原生的表单组件时,在有弹出框出现的情况下,原生表单组件会出现在遮罩层上面,且会造成事件穿透的情况。 解决方案一: 使用cover-view,cover-view比原生组件的层级更高,或者说也是一种原生组件,不过在cover-view的子组件只能是coveri-view、cover-image,对于包

    2024年02月10日
    浏览(59)
  • ELK常见部署架构以及出现的问题及解决方案

    ELK 已经成为目前最流行的集中式日志解决方案,它主要是由 Beats 、 Logstash 、 Elasticsearch 、 Kibana 等组件组成,来共同完成实时日志的收集,存储,展示等一站式的解决方案。本文将会介绍ELK常见的架 构以及相关问题解决。 Filebeat :Filebeat是一款轻量级,占用服务资源非常少

    2024年02月13日
    浏览(33)
  • BurpSuite【安装配置、使用细节、常见问题解决方案等】

    问题描述 使用某博客所述方法安装BurpSuite后,当天使用正常,但过几天后发现无法打开。 可能原因 JAVA安装路径下的文件夹名(父级文件夹)被修改过,但是系统环境变量中的路径值没有相应修改。 解决方案 检查系统环境变量中JAVA_HOME和Path的路径值(根据个人安装时的配置

    2024年02月11日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包