在NoSQL空间里的多种语言

版权声明:此文章转载自极客头条

如需转载请联系听云College团队成员阮小乙,邮箱:ruanqy#tingyun.com

关系数据库已经存在很长时间,通常开发人员倾向于经常使用它们,并很熟悉使用它们所提供的特性集。关系数据库的设计是从用户隐藏内部中做的一项伟大的工作。像数据如何存储在磁盘上的问题、如何在底层写入路径,以及数据库缓存问题和如何经常使用过于先进的常规数据库。

我们生活在一个数据密集的世界,在过去的几年我们见证了社会网络和物联网的扩张,一切都连接到了互联网,并且一切都会发出和接收事件。在关系世界中,数据需要以不同的方式处理。我们看到越来越多的请求只是为了存储非结构化数据存储的值。截至2012年,每一天以2.5艾字节(2.5×1018)被存储,尽管世界上90%的存储数据已经聚集在过去的两年。这只是一些原因,我们需要一个思维的转变,关于存储和为什么NoSQL不再是炒作。

在NoSQL的世界里,事情有点不同。数据库是不通用的,他们通常用来解决一个特定的用例。他们工作得很好,但并不那么优秀,也会有其他问题。他们通常选择大数据项目,我们需要较高的、非功能的需求,并且它几乎不可能不知道内部使用NoSQL数据库。

NoSQL空间

在NoSQL空间中,主要分为四个类型:文档数据库、键值存储、列数据库和图形数据库。

文档数据库可能是最受欢迎的数据库类型了,主要是MongoDB在DB-Engine rankings中排出的所有数据库排名中排在前十,在以NoSQL数据库为代表中排名第一。MongoDB有丰富的特性,具有主/从内置的碎片复制和使用内存映射文件的数据存储。它是伟大的原型,由于存储和查询数据时的灵活性,在大多数地方它是一个很好的替代品。但PostgreSQL或其他RDBMS适合但预定义模式会阻碍你的。这种类型的其他数据库都是CouchDB文档存储与主主复制和最终一致性、Couchbase两个键值和文档存储,提供JSON API是有用的作为客户端-服务器应用程序的存储引擎。

当你想到键值存储时,可以考虑分布式执行的地图。Redis和HazelCast就是这种类型的数据库。Redis是一个速度极快的数据库。它是用C编写的,具有自动故障转移的主从复制,它是快速变化的数据与一个可预见的数据库大小的最佳选择。使用的一个例子可以是会话存储,为电子商务网站购物车,或者实时分析。HazelCast是内存中的分布式存储和计算平台,提供开箱即用的分布式实现许多API,Java开发人员熟悉的分布式实现,如地图、集、列表、信号量、执行等,它可以被视为一个插件替换工具,比如像EhCache、Redis、JCache。

列族数据库(Column family)包含相关数据列,存储为键值对。这种类型最受欢迎的数据库是Cassandra和HBase。Cassandra起源于亚马逊的DynamoDB和Google的BigTable,它非常适合存储大量数据。所有节点都是平等的,无共享架构,无主无单点故障。CQL(Cassandra查询语言)类似于SQL。它通常应用于网络分析、计数、事务日志和存储的传感器数据。HBase是Hadoop框架的一部分,使用HDFS文件系统作为存储,可应用于Hadoop的Map/Reduce、日志数据的分析,以及在任何地方扫描巨大,也需要加入二维表。

在图形数据库中,两个实体之间的关系比实体本身更重要。这种类型主要的代表是Neo4J和TitanDB。Neo4J为图形数据库是用Java编写的,且使用的是基于模式匹配的查询语言,但也可以使用“Gremlin”图遍历语言。它有很好的图形风格,具有着丰富和复杂且相互关联的数据,如搜索路线、社会关系、公共交通、道路地图,或网络拓扑结构。TitanDB是一个可伸缩的图表框架优化存储,以及查询包含数以千亿计的顶点和边的跨多机集群分布图。它可以使用不同的存储后端:Cassandra、HBase、BerkeleyDB,和为主流框架(Hadoop、Spark、ElasticSearch、Solr)整合提供了巨大支持。

多种语言的持久性方法

这些天并不少见的是,在同一项目中的关系和非关系数据库组合,甚而不同的数据库相同类型的组合。微服务架构影响很大,因为每个小服务是其数据的所有者,而且API和服务分离背后所隐藏的一切都是基于使用案例的,所以很自然地选择它作为最佳存储。

12345.png

Martin Fowler的博客中有一个多存储引擎的应用。用户会话,作为临时数据快速优化的频繁读取,放置在Redis中。财务数据,则是自然关系存储在关系数据库中的报告。购物车有会议的类似性质,具有临时快速访问数据,所以它存储在键值存储区。作为图形数据库Neo4j推荐引擎的大力支持,用户相似性是推荐给客户的重要因素,这是选择的主要原因。产品目录有文档的性质,有很多动态查询这些数据的标准,在用例中MongoDB的灵活性和速度是很棒的。Cassandra的杀手锏是时间序列数据,它有Spark和Solr的大整合,因此它是分析和用户活动日志的最佳选择。

总结

多语种的支持并不是免费的午餐,它是有代价的,代价是系统的复杂性。几年前,它就足够了解一种编程语言,为一个存储引擎构建一个系统的。但现在你需要通晓各方面的数种语言。这就是为什么你需要熟悉每个选择的成本,并引入一个新的技术,只有当它的好处远高于它带来表的复杂性。最可怕的事情是,现在每个人都在谈论语言的方法,目的只是为了新的技术。

因为NoSQL的本质,建立了解决一个特定的用例,准备挖得更深一些,学习一些数据库的功能。大数据和分布式的系统的问题很大不同的单个实例的问题,并不熟悉的技术可以导致更大范围内的问题。做好功课,探索可能的解决你的问题,做出决定,并熟悉你所选择的工具。

原文:Polyglot Persistence in NoSQL Space

想阅读更多技术文章,请访问听云技术博客,访问听云官方网站感受更多应用性能优化魔力。

关于作者

阮小乙

人生就该充满正能量!

我要评论

评论请先登录,或注册