存储和计算技术的选择

存储和计算技术的选择

sjjt-203

前一阵子公司有个售前来沟通某个用户的情况:数据量比较大,又涉及很多复杂的关联计算,在数据库中用SQL计算性能很差。本来这种场景是比较适合集算器的集文件(集算器特有的压缩二进制格式)存储并计算,但据说这个用户的历史数据还会经常变动,而集文件目前没有提供改写能力(为了保证压缩率和性能),也就不容易直接用。于是想推荐用户采用nosql产品做存储,集算器在上面做计算。

赶快打住!如果用户真的听了,那会恨死我们。


这个场景中有三个要素:数据量大、复杂计算、频繁改动。

为了解释这三者的大致关系,我画了一个不太严谨的图:

存储与计算

NoSQL数据库在存储时不考虑事务一致性,而且许多NoSQL产品对key-value结构(要改的数据肯定要有个key)的数据都会采用LSM树等优化手段,一般情况比RDB常用的B树性能要好,所以对于频繁改的应用,NoSQL的效率会比较高。相反,RDB虽然也能频繁改,但为了事务一致性等因素,效率就会低于NoSQL。

但key-value结构的NoSQL却不擅长大数据计算,除了按key找value比较快以外,涉及到遍历(这是家常便饭)的运算都不灵光,主要是因为value是无确定结构的,每次取出数据要现解析,而且数据结构也会多存很多空间,所以大数据计算效率就会远远低于RDB(所以上述场景一定要打住,绝不可以推荐NoSQL)。

RDB频繁修改后会导致数据在硬盘上的连续性很差,也不容易做好压缩,这样大数据量遍历的性能也不会太好。而RDW在RDB基础上做了运算优化,可以事先整理数据,放弃了复杂的写一致性能力,这样对于大数据计算就会有更好的性能。但反过来,频繁改就不适合了。

RDB和RDW都采用SQL体系运算,对于简单查询计算没太大问题,但过于复杂的关联和过程性运算,由于关系代数的局限性,很多优化算法无法实施(我们已经多次说过这个问题),所以在复杂运算场景下性能不佳(也就会发生上述场景的现象)。

集算器是为了复杂计算而设计,可以实现更优的算法获得更好的性能。但如开始所述,目前的集文件又不支持改写,所以它只适合解决复杂运算,而难以面对频繁改的场景。集算器其实比RDW在大数据计算性能方面更好,不过作为计算引擎并不太关注存储,而大数据需求中还是会比较在意的可维护管理能力就要弱了。

集算器进一步发展出来的仓库版将支持少量修改的存储方案,这样可以在保证复杂运算能力的基础上再提供数据维护能力,可以逐步替代数据仓库,不过也不合适频繁修改。而另一个方向的云库版则更注重结构多样性,同时也支持事务一致性,能适应频繁改,而且有集算器提供复杂计算能力,但同前面分析NoSQL的理由,这时候它又不适合大数据遍历了。


那么这三样都想要怎么办呢?难道就只能见鬼去?

其实也有办法,只要肯多花钱买大内存(还可能要集群)把数据全装进去,这三样就能并存了。毕竟,有钱能使鬼推磨嘛,呵呵!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101703.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 这几天收到了同学们提交的赛道设计图纸[通俗易懂]

     §01室外越野▲图1.1室外越野赛道▲图1.2室外越野赛道设计图纸 §02单车拉力▲图2.1单车拉力快车道 §03室内PVC赛道一、坡道1、背景布下的桥还有,这样的坡道比赛时可以用吗?本来是防止单车摔下来的。▲图3.1蓝布下的坡道回复:这是允许的。2、桥连着桥卓大大,这个可以么,桥接桥?▲图3.2连体桥回复:这是允许的。 §04相关问题一、环境改变卓大大好,,我们现在的场地上面

    2022年4月9日
    50
  • Jmeter安装步骤「建议收藏」

    Jmeter安装步骤「建议收藏」1、官网下载地址:http://jmeter.apache.org/download_jmeter.cgi2、下载到本地(我是D盘中:存放目录最好都是英文)3、配置环境变量:(window10:设置-》系统-》关于-》系统信息-》高级系统设置-》-OK)4、此处为我的安装目录:变量名称 变量值 JMETER_HOME D:\testsoft\apac…

    2022年6月5日
    23
  • Js 取模运算、取商、取整方法

    Js 取模运算、取商、取整方法1.Js代码://求余数document.write(1%4);document.write(6%4);//求商console.info(1/4);console.info(6/4);//求商,取整console.info(parseInt(1/4));console.i

    2022年6月21日
    97
  • qq群大数据可视化查询_QQ数据库

    qq群大数据可视化查询_QQ数据库2009年QQ群关系数据库可视化查询器优化推广获客神器十年老数据库最近很多人问这个QQ群关系数据库的事儿,拉出来聊一聊,顺带做了部分优化之前这个是被很多大神玩丢下来的东西,近几年手游市场的兴起,又成了手游市场的获客神器2012年之前封存的群关系数据,收录了将近8000万条群组信息,包含各种行业群,交友群,游戏群,手游推广的主要客户群体还是来源于游戏相关的群。简单讲,就是通过QQ群关系数据库,获取十年前的端游客户,从而转化为手游的消费者。为何要用这么

    2022年10月2日
    0
  • 《SQLSERVER2012之T-SQL教程》T-SQL单表查询(二)「建议收藏」

    《SQLSERVER2012之T-SQL教程》T-SQL单表查询(二)

    2022年2月22日
    48
  • Python 数组操作_python中数组的表示形式

    Python 数组操作_python中数组的表示形式文章目录前言 一、numpy是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言在python中本身有着列表等数据结构,但是列表只是一种数据的存储容器,不具备任何计算能力。故引入数组的概念。提示:以下是本篇文章正文内容,下面案例可供参考一、numpy是什么?NumPy是一种非常常用的第三方模块,在学习数据分析及挖掘时经常能够用到他。接下来就阐述一些使用numpy进行的基本操作。二、使用步骤1.引入库代码如下(示例):i…

    2022年8月13日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号