巨杉访谈:SequoiaDB如何实现海量数据存储与实时查询
巨杉数据库高访问量、海量数据业务背后的基础系统架构是如何设计和优化的?分布式数据库是如何做到数据的透明水平、垂直拆分,实现海量数据实时查询的?
1.巨杉数据库作为国内第一款自主研发的NewSQL数据库,在发展过程中是否遇到困难或质疑?与海外产品如MongoDB有什么区别?
巨杉数据库是巨杉团队从零开始研发的,数据库内核是没有基于任何的开源数据库产品的。这一点也是我们团队非常自豪的一个成绩。
在发展过程中,自然也是有一些人对我们表示质疑,或者是认为国内团队不可能从零开始开发数据库,或者即使是国内开发的,性能和稳定性也一定不如海外产品。不过如今,巨杉经过了企业市场的考验,也真正用产品和技术服务证明了自己。我们超过百家的企业用户,特别是银行这样客户的认可和大规模使用,也是对我们最好的褒奖吧。
对于海外产品的对比,我们的性能通过第三方的测试,与MongoDB、Cassandra 等都在统一水平,部分性能甚至大大优于海外的产品。同时,上面提到的多个企业应用场景,我们也是实打实的磨炼出来的,许多企业级应用场景,比硅谷的NoSQL/NewSQL产品都要领先。
2.巨杉数据库在企业的应用场景有哪些?在解决用户需求方面有什么心得?
巨杉数据库发布5年以来,在企业级大数据应用中积累了丰富的经验,也打磨出我们的主要场景。
企业对于数据库的新需求主要包括海量数据的管理、非结构化数据的管理、历史数据在线化以及数据全维度展现等等。因此巨杉也培育了几大解决方案,包括:海量历史数据平台,企业内容管理平台,大数据湖,全量数据视图等等。
3.能否谈谈巨杉数据库在海量数据存储以及高性能的查询这块技术上有什么亮点?
首先,由于巨杉数据库是天生的分布式架构,因此能方便快捷地在X86架构下实现集群规模和存储容量的水平扩展,这使得海量数据的存储不仅变得简单易行,而且和传统方式相比成本大幅下降。
而在数据的录入和使用方面,巨杉数据库更是充分发挥分布式架构的优势,提供了一系列的技术手段以实现最佳效率,比如垂直分区、水平分区、自动读写分离、自定义存储分布策略等。除此之外,我们并没有丢弃现有的技术,而是充分利用了已经在数据库领域中广泛使用的一些技术手段,比如灵活高效的索引机制、高效数据压缩等,进一步提高了数据操作时的效率。最后,为了方便传统的数据库使用者,我们还特意提供了 SQL 引擎,并结合巨杉数据库的技术特点对 SQL 引擎做了优化,让 SQL 使用者在巨杉数据库上也能有最佳体验。
综合以上特点可以看出,对于有海量数据存储和高效查询要求的用户来说,巨杉数据库是非常好的选择!
4、当数据达到亿级或者百亿级以上,数据库平台构架如何设计和优化?在这个领域有什么坑是开发者可以避免的?
在银行这样的企业级应用中,亿级的数据基本是比较小儿科。通常数据量都是百亿级别,超过百TB。
对于这样的海量数据来说,“分布式”技术几乎是不二之选!以巨杉数据库为例,可利用垂直分区、水平分区等功能,充分结合业务数据的特点(这一点很重要),在数据库层面做好架构设计,这样就能将海量数据均匀分布到分布式集群的各个节点上,同时又不会增加应用的复杂度。一旦做好了这样的架构设计,应用层无论是数据的录入操作还是查询操作,在数据底层都能自动定位成部分节点内甚至单节点内的操作,从而将针对海量数据的操作转化成了小批量的操作,必然实现效率上的极大提升。
但是,也必须要意识到在“大数据”时代,数据量的膨胀速度是超乎人们想象的,局部节点内的数据也可能会达到一个不小的数量级,这几乎是难以避免的情况。在这种情况下,除了在现有集群上继续做水平扩展之外,也要充分利用高效索引及数据压缩等传统技术以提高单节点内的效率。
最后,不要忘记巨杉数据库的读写分离和自定义数据分布策略等机制,它们可以帮助你将负载均匀分散到不同的节点上,从而最大程度上避免“热点”竞争的出现,这也是分布式技术所具有的天然优势。
5、如何评价现有的分布式大数据处理开源架构?它们中有何需要改进或者值得借鉴的地方?
第一,Hadoop 不代表大数据的全部,现在国内好像行成了一种风气,Hadoop 就代表了大数据。但事实 Hadoop 能解决的也只是一部分的需求,特别在大数据的在线实时交互这一块,NewSQL/NoSQL也是不错的选择。而这一点近一年多来,我们也在众多的企业级用户身上证实了。
第二,对于分布式数据库本身。NoSQL和关系型数据库这两者肯定是逐渐融合的过程,NoSQL数据库会不断注重企业级功能如 SQL 支持的提升,也是因此现在衍生出了NewSQL的概念。数据库未来将会是一个分布式、高性能的立足实时处理和在线服务同时作为数据源支持上层的数据分析应用的定位。
6.为什么很多分布式的数据库都采用开源的模式?这种形式有什么优劣势?
我们很认同一种划分就是 “开源软件商业化”和“商业软件开源化”。巨杉走的是“商业软件开源化”的路线。
我们坚持以商业化软件为核心,向企业用户提供为企业用户提供高质量、稳定可靠的商业化产品与标准化专业化的技术服务,这也是企业市场不变的需求。
可以说是一种技术上的情怀,让我们也和硅谷的前辈们一样选择开源,我们自己开发的数据库产品,我们也希望和更多的开发者分享我们的技术。
同时我们也在商业化经营同时,通过产品的开源和开源生态建立,快速推进产品技术的品牌和用户,同时能帮助构建自己的技术生态。
此外,开源也有出于我们团队的技术自信,也是一种程度回应对于我们自己研发的质疑吧。
而对于“开源软件商业化”,如果完全开放开源,对于商业化运营会有不小的影响。主要也就是商业化与社区版发展的关系,社区的需求与企业用户的需求不一定一直,商业版本与社区版本的发展方向也可能互相冲突,甚至于商业化团队无法完全掌握核心技术,这对于用户来说可不是好消息。
7.对于想踏入或刚刚进入这个领域的新人来说,有没有什么心得建议?
对于在这个领域经验尚不够丰富的朋友们来说,我个人认为最重要的两点建议就是:
1)充分了解你想使用的分布式技术有哪些特点,并且一定要充分结合你的业务特点,这样你才有可能做出最佳选择。记住,绝没有哪一项技术在所有的业务场景下都是最佳选择,最适合业务场景的才是最佳选择!
2)理论分析固然重要,但实测更有说服力!不要嫌麻烦,一定要用全面的测试结果来支持(或者推翻)你的方案。
上面这两点看上去都是很朴素的道理,但实际操作中却经常被忽略,也是极容易掉进去的坑。
编辑: 彭志强