扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
关系数据库经过几十年的发展,已经非常成熟,但同时也存在不足:
成都创新互联专注于武隆企业网站建设,成都响应式网站建设公司,成都做商城网站。武隆网站建设公司,为武隆等地区提供建站服务。全流程按需网站开发,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务
表结构是强约束的,业务变更时扩充很麻烦。
如果对大数据量的表进行统计运算,I/O会很高,因为即使只针对某列进行运算,也需要将整行数据读入内存。
全文搜索只能使用 Like 进行整表扫描,性能非常低。
针对这些不足,产生了不同的 NoSQL 解决方案,在某些场景下比关系数据库更有优势,但同时也牺牲了某些特性,所以不能片面的迷信某种方案,应将其作为 SQL 的有利补充。
NoSQL != No SQL,而是:
NoSQL = Not Only SQL
典型的 NoSQL 方案分为4类:
Redis 是典型,其 value 是具体的数据结构,包括 string, hash, list, set, sorted set, bitmap, hyperloglog,常被称为数据结构服务器。
以 list 为例:
LPOP key 是移除并返回队列左边的第一个元素。
如果用关系数据库就比较麻烦了,需要操作:
Redis 的缺点主要体现在不支持完成的ACID事务,只能保证隔离性和一致性,无法保证原子性和持久性。
最大的特点是 no-schema,无需在使用前定义字段,读取一个不存在的字段也不会导致语法错误。
特点:
以电商为例,不同商品的属性差异很大,如冰箱和电脑,这种差异性在关系数据库中会有很大的麻烦,而使用文档数据库则非常方便。
文档数据库的主要缺点:
关系数据库是按行来存储的,列式数据库是按照列来存储数据。
按行存储的优势:
在某些场景下,这些优势就成为劣势了,例如,计算超重人员的数据,只需要读取体重这一列进行统计即可,但行式存储会将整行数据读取到内存中,很浪费。
而列式存储中,只需要读取体重这列的数据即可,I/O 将大大减少。
除了节省I/O,列式存储还有更高的压缩比,可以节省存储空间。普通行式数据库的压缩比在 3:1 到 5:1 左右,列式数据库在 8:1 到 30:1,因为单个列的数据相似度更高。
列式存储的随机写效率远低于行式存储,因为行式存储时同一行多个列都存储在连续空间中,而列式存储将不同列存储在不连续的空间。
一般将列式存储应用在离线大数据分析统计场景,因为这时主要针对部分列进行操作,而且数据写入后无须更新。
关系数据库通过索引进行快速查询,但在全文搜索的情景下,索引就不够了,因为:
假设有一个交友网站,信息表如下:
需要匹配性别、地点、语言列。
需要匹配性别、地点、爱好列。
实际搜索中,各种排列组合非常多,关系数据库很难支持。
全文搜索引擎是使用 倒排索引 技术,建立单词到文档的索引,例如上面的表信息建立倒排索引:
所以特别适合根据关键词来查询文档内容。
上面介绍了几种典型的NoSQL方案,及各自的适用场景和特点,您可以根据实际需求进行选择。
传统观念中 NoSQL数据库非常适合某些数据类型,如:非关系数据源。同时,NoSQL被吹捧为最适合Web应用程序的优秀平台。然而他适合大多数数据,特别是web应用程序的数据是相关型。那么,这是否可以给你一个坚持使用RDMS的理由呢?也不一定,即使很困难,我们还是要做出选择。
评估NoSQL是一个很茅盾的理论,一些人认为,应该将所有文档数据存储在一个文档中,做链接代码就是亵渎神明。另外一部分人认为,存储应用文档,
加入代码,才是合理选择。与此同时,不同的数据库,需要在文档中限制嵌套数据数量。有的人会鼓励文档引用。这是NoSQL数据模型的基本部分,也没有一个
明确的共识。
曾经有一篇很热的帖子"Why you should never use
XYZ",我想,读到这里,一定会有人搜索这篇文章。当然,这种文章各式各样,太过于笼统的标题也没什么帮助。毫无疑问,会有人会搜索这个文章,然后再找
到这个文章,进一步深入,找到该文章的方法远比成功(理解问题)的故事多。很难知道谁提供了一个有效的技术问题,谁又误读了这个问题(或者缺少证据证明其
观点)。
有大量选择,RDBMS的世界,选择就很容易。你有4或5个目标,大家工作方式差不多,来选择环境、预算支持的平台。对于成熟的产品,风险比较小。 NoSQL的世界,有很多数据库引擎功能选择。每一个有自己的独特优势,也有致命弱点。所以选择很难, NoSQL项目生命周期短,尝试新项目或者流行项目也会有风险。上次,我的的项目是在 CouchDB上,而现在似乎停摆了。
做出这个痛苦决定的原因是,这可能是一个案例:你需要做一大堆工作,才能知道,你做出的选择对与错。你可以实体化你的数据模型,了解他与系统的工作
情况,但是,这只有你正真撞到南墙,才可以找到裂缝(答案)。以我为例,我建的应用程序是关系数据库,移动文件存储的主要因素是,需要一个无模式设计来达
到我的目标。使用NoSQL 数据库存储关系型数据库并不是我们所常说的,虽然,这种事常常发生。
现在我在用 Couchbase 和
MongoDB,Mongo对我没多大吸引力,不过鉴于他非常流行,对于引起来说,很有好处。当然,很多都可以以同样的方式流行。PHP很流行,因为他的
易用性,而不是因为他很好。我现在在使用MongoDB和PHP,也在学习Couchbase,如果你有任何NoSQL平台的使用感想,欢迎交流。
星环科技
星环信息科技主要从事大数据时代核心平台数据库软件的研发与服务,被Gartner列为国际主流Hadoop发行版厂商。其产品Transwarp Data Hub提供高速SQL引擎Transwarp Inceptor, NoSQL搜索引擎Transwarp Hyperbase、流处理引擎Transwarp Stream和数据挖掘组件Transwarp Discover。
帆软软件
帆软软件由报表软件FineReport起家,目前已成为报表领域的权威者,拥有10年企业数据分析的行业经验。后发布的商业智能自助式BI工具FineBI,提供包括Hadoop、分布式数据库、多维数据库的大数据可视化分析;提供PC端、移动端、大屏的可视化方案,广泛应用于银行、电商、地产、医药、制造、电信、制造、化工等行业,拥有成熟的行业化解决方案。
数据可视化类
数字冰雹
数字冰雹主营大数据可视化业务,提供集设计、程序开发、硬件集成为一体的解决方案,广泛应用于航天战场、智慧城市、网络安全、企业管理、工业监控等领域。
海云数据
海云数据的产品——图易能够集成用户内部系统大量结构化、非结构化数据,在真实的数据源上,将行业大数据进行多维度的可视分析。目前主要应用于公安、航空、快消、制造、金融、医疗、信息安全等领域。
星图数据
星图数据是互联网大数据服务公司,涉及线上零售、线上娱乐、线上教育等领域。基于分布式大数据获取与存储系统进行大数据处理及分析,具有自有的大数据分析体系和云计算处理技术。
用户行为/精准营销分析类
大数据技术使得用户在互联网的行为,得到精准定位,从而细化营销方案、快速迭代产品。这方面的厂商有GrowingIO、神策数据等。
GrowingIO
GrowingIO是基于互联网的用户行为数据分析产品,具有无埋点的数据采集技术,可以通过网页或APP的浏览轨迹、点击记录和鼠标滑动轨迹等行为数据,进行实时的用户行为数据分析,用于优化产品体验,实现精益化运营。
神策数据
与GrowingIO类似,也是基于用户网络行为,采集数据进行分析。技术上提供开放的查询 API 和完整的 SQL 接口,同时与 MapReduce 和 Spark 等计算引擎无缝融合,随时以最高效的方式来访问干净、规范的数据。
分析服务类
提供舆情分析的有百度统计、品友互动、Talking data、友盟、中科数据等等。
百度统计
百度统计是专业的网站流量分析工具,和GA类似,提供免费的流量分析、来源分析、网站分析等多种统计分析服务,能够告诉用户访客是如何找到并浏览用户的网站,在网站上做了些什么,以此来改善访客在用户的网站上的使用体验。
Talking Data
TalkingData是独立的第三方移动数据服务品牌。其产品及服务涵盖移动应用数据统计、移动广告监测、移动游戏运营、公共数据查询、综合数据管理等多款极具针对性的产品及服务。在银行、互联网、电商行业有广泛的数据服务应用。
友盟+
第三方全域大数据服务提供商,通过全面覆盖PC、手机、传感器、无线路由器等多种设备数据,打造全域数据平台。提供全业务链数据应用解决方案,包括基础统计、运营分析、数据决策和数据业务等,帮助企业实现数据化运营和管理。
这两个所适用的领域不同,不具有可比性。
ElasticSearch本质是搜索引擎,它通过建立反向索引的方式处理文档型数据,不具备通常数据库的事务、关联查询等等特性,你可以把它当作nosql来用。
MySQL是典型的关系型数据库。
如果你的场景是海量数据,要求水平扩展,无事务要求,那么可以用ES,否则还是要MySQL,或者根据业务需求混合使用两种。
对此,前Google工程师,Milo(本地商店搜索引擎)创始人Ted Dziuba最近发表标题惊人的博客“I Can't Wait for NoSQL to Die”,对NoSQL的适用范围进行了分析。他认为,
NoSQL也会带来一连串的新问题,并不会成为主流,无法取代关系型数据库。
他的理由是:Cassandra等NoSQL数据库在使用上并不方便,比如,修改column family定义时就需要重启。而且NoSQL更适合Google那样的规模,而一般的互联网公司都不是Google,早早地去考虑Google那样的规模的可扩展性,纯粹是浪费时间,存在巨大的商业风险。
他还透露,即使在Google,AdWords这样的关键产品也是基于MySQL实现的。
他在文中最后表示,NoSQL当然死不了,但是
它最终会被边缘化,就像Rails被NoSQL边缘化一样
Dziuba的文章因为言辞激烈,在社区里引起了强烈反应。
SQL数据库阵营赞同者大有人在。craigslist工程师、著名的MySQL专家Jeremy Zawodny表示,在读此文的时候,不时会心一笑。他说,
NoSQL运动只是软件不断进化进程中的正常现象
。关系型数据库也会继续发展,MySQL社区不断推出的XtraDB或InnoDB插件, PBXT, Drizzle都是证据。各种技术竞争的结果是,我们获得了更多解决问题的选择。
drizzle项目开发者Eric Day也表示,NoSQL有很多值得学习的,但是目前大部分实际项目的最佳选择还是关系型数据库。
NoSQL阵营当然不会坐视不理,Cassandra项目组的Eric Evans表示,Dziuba提到Cassandra修改column family定义的问题其实很容易解决。而且,NoSQL并不是要取代MySQL,事实上Twitter仍然在用MySQL。如果关系型数据库能够承担负荷,那就用好了;如果不行,请考虑NoSQL。
而德国知名博客Code Monkeyism则嘲笑Dziuba看起来并没有用MySQL做过真实项目,因为MySQL如果没有memcache,基本上无法应付网站项目。他认为,NoSQL将使SQL数据库边缘化,而且一个重要理由恰恰是可以节省DBA的开销。
digg的前任首席架构师现在也在创业的Joe Stump说,自己现在的创业项目就是用NoSQL,而且列举了一系列问题挑战SQL阵营。
Lambda架构的核心理念是“流批一体化”,因为随着机器性能和数据框架的不断完善,用户其实不关心底层是如何运行的,批处理也好,流式处理也罢,能按照统一的模型返回结果就可以了,这就是Lambda架构诞生的原因。现在很多应用,例如Spark和Flink,都支持这种结构,也就是数据进入平台后,可以选择批处理运行,也可以选择流式处理运行,但不管怎样,一致性都是相同的。
Kylin
Kylin的主要特点是预计算,提前计算好各个cube,这样的优点是查询快速,秒级延迟;缺点也非常明显,灵活性不足,无法做一些 探索 式的,关联性的数据分析。
适合的场景也是比较固定的,场景清晰的地方。
ClickHouse
Clickhouse由俄罗斯yandex公司开发。专为在线数据分析而设计。
Clickhouse最大的特点首先是快 ,为了快采用了列式储存,列式储存更好的支持压缩,压缩后的数据传输量变小,所以更快;同时支持分片,支持分布式执行,支持SQL。
ClickHouse很轻量级,支持数据压缩和最终数据一致性,其数据量级在PB级别。
另外Clickhouse不是为关联分析而生,所以多表关联支持的不太好。
同样Clickhouse不能修改或者删除数据,仅能用于批量删除或修改。没有完整的事务支持,不支持二级索引等等,缺点也非常明显。
与Kylin相比ClickHouse更加的灵活,sql支持的更好,但是相比Kylin,ClickHouse不支持大并发,也就是不能很多访问同时在线。
总之ClickHouse用于在线数据分析,支持功能简单。CPU 利用率高,速度极快。最好的场景用于行为统计分析。
Hive
Hive这个工具,大家一定很熟悉,大数据仓库的首选工具。可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能。
主要功能是可以将sql语句转换为相对应的MapReduce任务进行运行,这样可能处理海量的数据批量,
Hive与HDFS结合紧密,在大数据开始初期,提供一种直接使用sql就能访问HDFS的方案,摆脱了写MapReduce任务的方式,极大的降低了大数据的门槛。
当然Hive的缺点非常明显,定义的是分钟级别的查询延迟,估计都是在比较理想的情况。 但是作为数据仓库的每日批量工具,的确是一个稳定合格的产品。
Presto
Presto极大的改进了Hive的查询速度,而且Presto 本身并不存储数据,但是可以接入多种数据源,并且支持跨数据源的级联查询,支持包括复杂查询、聚合、连接等等。
Presto没有使用MapReduce,它是通过一个定制的查询和执行引擎来完成的。它的所有的查询处理是在内存中,这也是它的性能很高的一个主要原因。
Presto由于是基于内存的,缺点可能是多张大表关联操作时易引起内存溢出错误。
另外Presto不支持OLTP的场景,所以不要把Presto当做数据库来使用。
Presto相比ClickHouse优点主要是多表join效果好。相比ClickHouse的支持功能简单,场景支持单一,Presto支持复杂的查询,应用范围更广。
Impala
Impala是Cloudera 公司推出,提供对 HDFS、Hbase 数据的高性能、低延迟的交互式 SQL 查询功能。
Impala 使用 Hive的元数据, 完全在内存中计算。是CDH 平台首选的 PB 级大数据实时查询分析引擎。
Impala 的缺点也很明显,首先严重依赖Hive,而且稳定性也稍差,元数据需要单独的mysql/pgsql来存储,对数据源的支持比较少,很多nosql是不支持的。但是,估计是cloudera的国内市场推广做的不错,Impala在国内的市场不错。
SparkSQL
SparkSQL的前身是Shark,它将 SQL 查询与 Spark 程序无缝集成,可以将结构化数据作为 Spark 的 RDD 进行查询。
SparkSQL后续不再受限于Hive,只是兼容Hive。
SparkSQL提供了sql访问和API访问的接口。
支持访问各式各样的数据源,包括Hive, Avro, Parquet, ORC, JSON, and JDBC。
Drill
Drill好像国内使用的很少,根据定义,Drill是一个低延迟的分布式海量数据交互式查询引擎,支持多种数据源,包括hadoop,NoSQL存储等等。
除了支持多种的数据源,Drill跟BI工具集成比较好。
Druid
Druid是专为海量数据集上的做高性能 OLAP而设计的数据存储和分析系统。
Druid 的架构是 Lambda 架构,分成实时层和批处理层。
Druid的核心设计结合了数据仓库,时间序列数据库和搜索系统的思想,以创建一个统一的系统,用于针对各种用例的实时分析。Druid将这三个系统中每个系统的关键特征合并到其接收层,存储格式,查询层和核心体系结构中。
目前 Druid 的去重都是非精确的,Druid 适合处理星型模型的数据,不支持关联操作。也不支持数据的更新。
Druid最大的优点还是支持实时与查询功能,解约了很多开发工作。
Kudu
kudu是一套完全独立的分布式存储引擎,很多设计概念上借鉴了HBase,但是又跟HBase不同,不需要HDFS,通过raft做数据复制;分片策略支持keyrange和hash等多种。
数据格式在parquet基础上做了些修改,支持二级索引,更像一个列式存储,而不是HBase schema-free的kv方式。
kudu也是cloudera主导的项目,跟Impala结合比较好,通过impala可以支持update操作。
kudu相对于原有parquet和ORC格式主要还是做增量更新的。
Hbase
Hbase使用的很广,更多的是作为一个KV数据库来使用,查询的速度很快。
Hawq
Hawq是一个Hadoop原生大规模并行SQL分析引擎,Hawq采用 MPP 架构,改进了针对 Hadoop 的基于成本的查询优化器。
除了能高效处理本身的内部数据,还可通过 PXF 访问 HDFS、Hive、HBase、JSON 等外部数据源。HAWQ全面兼容 SQL 标准,还可用 SQL 完成简单的数据挖掘和机器学习。无论是功能特性,还是性能表现,HAWQ 都比较适用于构建 Hadoop 分析型数据仓库应用。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流