存储和计算技术的选择

存储和计算技术的选择

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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 验证码的原理及作用「建议收藏」

    验证码的原理及作用「建议收藏」验证码被广泛用于用户登录以及注册的校验,那么验证码的作用仅仅是进行校验吗?,或者说为什么会有验证码校验这一环节?验证码是目前大多网站所支持并使用于注册登录的。就在于其作用能有效防止恶意登录注册,验证码每次都不同,这就可以排除,用其他病毒或者软件自动申请用户及自动登陆.有效防止这种问题。这就是验证码的真正作用,能够防止别人进行恶意攻击,而且大家也会注意到一点,如果频繁发送验证码,用户请求注册…

    2022年7月14日
    13
  • 解决JQuery中click里面包含click事件,出现重复执行的问题

    解决JQuery中click里面包含click事件,出现重复执行的问题

    2021年11月22日
    52
  • FORM表单

    FORM简介我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来。与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否

    2022年3月29日
    40
  • Vmware安装win10的失败总结

    Vmware安装win10的失败总结下了番茄,萝卜,深度等多个win10镜像均出现各种莫名其妙的小问题,还是linux大法好哇~~失败一:          未手动分区,许久不装windows系统了,忘记了手动分区,用镜像里自带的分区工具,如diskgenius等分区后安装失败二:          分区后需进入bios设置优先从光盘启动的模式失败三:          找不到ghost文件,进入winPE手动查找光盘里…

    2022年6月22日
    279
  • IGMP协议原理_IGMP协议详解

    IGMP协议原理_IGMP协议详解IGMP协议概述IGMP(InternetGroupManagementProtocol)因特网组管理协议,是TCP/IP协议簇中负责IP组播成员管理的协议。IGMP协议运行于主机与主机直接相连的组播路由器之间,主要用于维护组播成员关系。IGMP发展了三个版本:IGMPv1:定义了基本的组成员查询和报告过程。IGMPv2:添加了组成员快速离开的机制。IGMPv3:成员可以指定接收…

    2025年11月18日
    1
  • 下载和运行GitHub上的代码教程总结

    下载和运行GitHub上的代码教程总结从昨天开始就想着从GitHub上下载一个开源的Vue的实战项目,希望能从中学习更多的Vue的实用内容,结果搞了半天好不容易下载了,不知道怎么弄。然而,今天终于成功了,激动地我赶紧来记录一下。如何从GitHub上下载自己需要的项目:1.首先,你要有一个自己的GitHub(https://github.com/)的账号。关于如何注册GitHub的账号以及如何获取你的SSH密钥这个问题,请大家参…

    2022年6月4日
    49

发表回复

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

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