• 大数据分析中Redis应用


    大数据分析中Redis

    大数据时代,海量数据分析就像吃饭一样,成为了我们每天的工作。为了更好的为公司提供运营决策,各种抖机灵甚至异想天开的想法都会紧跟着接踵而来!业务多变,决定了必须每天修改系统,重新跑数据,这就要求极高的海量数据读取和存储速度!

     

    公司每天增加几亿行的业务日志数据,我们需要从中分析出各种维度的业务画像。经过很长时间的摸索,选择了Redis作为读写数据的缓存。

     

     

    1,开发平台,C#Net,写Windows服务抓取原始日志数据,合并精简压缩后,写入Redis集群。

     

    2,各业务系统从时间维度上遍历Redis缓存数据,逐行分析处理,中间结果和最终结果写入Redis。

     

    3,另一套Windows服务抓取Redis里的结果数据,保存回数据库。这里有点像MQ的工作方式。

     

    实际上,第一步只有一套系统,这是数据基础。第二第三一般每个子系统都有一对。甚至A系统的结果直接访问B系统放在Redis中的结果数据。

     

    整体上看起来耦合度有点高,但是这一套架构得到了极高的速度,单个子系统实例每秒钟可处理1万到10万个订单!并且是很多套子系统同时工作,单一子系统因业务原因不会吃完全部Redis性能。单独对某一台Redis服务器做压力测试,最高得到了222万ops的速度,测试的是比较简单的业务,统计满足某种业务规则的订单总数。

     

     

    为何需要这么高速度??

     

    业务规则一旦改变,修改程序后,往往需要重新跑最近一周什么一个月的历史数据。如果每天改几次呢?如果赶上双十一旺季,太慢的速度恐怕连实时数据都赶不上。

     

     

    Redis怎么做到220万ops

     

    1,Redis是单线程模型,因此32核心服务器安装32个实例

     

    2,数据分片,key散列后均分到几十个实例上

     

    3,关闭持久化,运维和Linux保证可靠性

     

    4,控制好数据包大小,高性能网络通信最忌收发大量小包,控制在1400字节附近最佳,最差也要pipeline

     

    5,其它在网上能轻易找到的细小技巧

     

     

    为什么不用数据库??

     

    经过大量验证,同样32核心服务器,数据库3巨头一般得到20000qps的查询速度和接近10000tps的写入速度。这是按照单表几百万数据有两个索引的情况测试。如果数据达到几千万上亿,再多两个索引,读写同时进行,那么速度只剩下四分之一不到。真真一个惨字!

     

    大数据分析,有很多是临时数据,需要合并、叠加、去重等等,它们的生命周期不长,一般24小时或48小时,也有不少是两三个小时,关键是数据量还特别大,每天几千万很常见。这类数据,写数据库是很不合适的。

     

    而使用Redis,一台32U512G机器,可以装下一个月几十亿经过压缩处理的历史数据,资源占用在50%上下。

     

  • 相关阅读:
    listview item 动画
    android sqlite blob
    Python3 配置文件(configparser)(转载)
    python之字符串格式化(format)
    PHP模拟发送POST请求之一、HTTP协议头部解析
    用HTML/JS/PHP方式实现页面延时跳转
    用memoization优化递归算法[JS/PHP实现]
    开通博客,记录一下。
    SpringMvc Json LocalDateTime 互转,form urlencoded @ModelAttribute 转换
    Springdata mongodb 版本兼容 引起 Error [The 'cursor' option is required, except for aggregate with the explain argument
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/8308923.html
Copyright © 2020-2023  润新知