面向 java 开发者的 nosql 选项
因为了解和喜欢 java 社区,所以尽管很少有人将 nosql 与某种语言绑在一起,我也要为全世界的 java 开发者写下这篇文章。文中,我将为你展示几种 nosql 数据库。之后,我将根据实际在 gith b stars 和 stack overflow tags 的项目中的使用情况,选出最常用的五个。并且我会让你知道它们是否支持 spring data 和 springboot。 为什么使用 nosql？ nosql 数据库帮助许多互联网公司通过最终一致性实现高可拓展性。因为 nosql 数据库通常分布在多台机器上,而且有一些延迟,所以它只保证所有的实例最终都是一致的。最终一致性服务通常被称为 base(基本可用,软状态,最终一致性)服务,这点与传统的 acid 正好相反。 选择 nosql 的候选项 定义前五名可能很困难。最近许多人都在尝试这个。请参考本文结尾处的研究和注释部分。 八月中旬,我在推特上告诉我的粉丝,我正在写这篇文章。我询问了关于 nosql 数据库的正面或负面的评述,收到了人们的反馈,其中有希望我涵盖的一些选项。 我收到许多建议,以下按字母顺序列出: arangodb cassandra co chbase dynamodb fa nadb hazelcast mongodb neo4j postgresql json redis (jetbrains) xod s 人们还提到 hibernate ogm(nosql 的 jpa)和 nosqlunit 来作为帮助访问和测试 nosql 数据库的工具。 请注意,我没有收到需要将 co chdb,hbase,elasticsearch 或 solr 包括在内的任何请求。 由于 co chdb 和 co chbase 的名称相似,它们经常被混淆,但是它们是完全不一样的。 由于 co chdb 是一个文件存储数据库,我将其包括在我的排名中。 我还添加了 hbase,因为它在 itb sinessedge,kdn ggets 和 db-engines 被提到过(在研究和注释部分)。 我没有将 elasticsearch 或 solr 包括在内,因为我相信这些并不常用作主数据存储。 raible 的排序技术 我用 indeed 上职位数量、gith b 上 star 数量、stack overflow 标签数和 docker 上 p ll 的数量作为指标去开发我的 top5 nosql 数据库排名系统。 indeed 上职位数量 我在 indeed jobs 上不区分地域搜索,结果除了 amazon 的 dynamodb 显示出的是排行榜的竞争者外,并没有新奇发现。 注意: 把"postgresql json"做为搜索条件很难得到准确的结果,因为很多招聘信息把"postgresql" 作为一个要求,而不是它对 nosql 的支持。因此我搜索"postgres + json"。xod s 是一家公司的名字,所以我添加"jetbrains"关键字来保证结果的准确。 gith b stars 我搜索并找到了 5 个顶级(star 最多)的 nosql 项目,分别是 redis,mongodb,arangodb,neo4j 和 cassandra。 注意: cassandra, hbase 和 postgresql 是镜像库。dynamodb, co chbase 和 fa nadb 没有服务在 gith b 上,因此,我统计他们的时候是基于他们的 java 驱动。统计每个项目的 java 驱动项目的星星数量是个好办法,但是 redis 只有 11 颗星 。 你可以使用 tim qian 的 历史 star 项目 来查看这 5 个项目的 star 增长情况。 stack overflow 标签 我在 stackoverflow 中搜索了上述每一个数据库的 tag,发现 mongodb 和 postgresql 是最受欢迎的,接下来是 neo4j, cassandra 和 redis. docker p lls 我在 docker h b 上搜索了相关的镜像,可以看到少部分数据库有 1000 万以上的 docker p ll,neo4j 有 500 万以上,其他的大多数也有 100 多万, fa nadb 和 jetbrains xod s 暂时没有可用的镜像 综合来看,这些数据和我的排名关系并不大,我觉得可能有两个原因,数据并不精确而且对于每一个数据库,并没有所谓标准的镜像 nosql 选项矩阵 我创建了一个结合了职位数、星数和标签数的矩阵表格。我根据它们在每个类别的排名授予 1-5 分。如果一个选项没有进入前五,就得零分。结果排名前五的是 mongodb、redis、cassandra、neo4j 和 postgresql,如下表所示。 db-engines 排名的前五个选项是 postgresql、mongodb、cassandra、redis 和 hbase。 两个表格的前五排名非常接近！ nosql 选项概述 由于我做出的前五个排名结果非常接近于 db-engines 的结果,所以我将使用我的前五个结果。下面是对每一个的概述,以及关于它们的 spring boot 支持的信息。 你可能会问"为什么是 spring boot？" 我的答案很简单:因为 spring boot 采用率很高。根据 redmonk 对 java 框架的最近的观察 , spring boot 采用率从 2016 年 9 月到 2017 年 6 月增长了 76%。 自 6 月以来的增长速度并没有减缓: 到 2017 年 8月 maven 下载量是 2220 万 。 mongodb mongodb 在 2007 年由 do bleclick、 shopwiki 和 gilt gro pe 的高级技术人员建立。它的源码在 gith b 上,使用的是 apache 和 gnu-apgl 许可证。它的众多大客户包括 adobe、 ebay 和 eharmony。 在  上是否可用？ 是的,包括用于测试的嵌入式 mongodb 。 是否能在 spring data 上获得支持？ 是的,通过 spring data mongodb 。 加分项: 为 hibernate ogm、 nosqlunit 和 jhipster 所支持。 redis redis 代表 remote dictionary server(远程字典服务器),由 salvatore sanfilippo 开创。它最初发布于 2009 年 4 月 10 日根据  的描述,redis 是采用 bsd 许可证的内存式数据结构存储,可以被用作数据库、缓存和消息代理。 使用 redis 的知名企业 包括 twitter、 gith b、 snapchat 和 craigslist。 是否在  上可用？ 是。 是否为 spring data 所支持？ 是的,通过 spring data redis 。 加分项: 为 nosqlunit 所支持。hibernate orm 支持正在进行中。 cassandra cassandra 是"一个管理结构化数据的分布式存储系统,其设计的目的是支持扩展到大数量级的商用服务器,并避免单点的失败" (引至 "cassandra - 在 p2p 网络中的一种结构化存储系统" 在 facebook 的工程博客上)。facebook 最初开发 cassandra 用于支持其收件箱的搜索功能。它的创始人,avinash lakshman (amazon dynamodb 的一位创始者) 和 prashant malik 在 2008 年七月把它作为开源项目发布。在 2009 年 3 月,cassandra 成为了 apache 的孵化器项目并在 2010 年 2 月成为了最高等级的项目。 除了 facebook 之外, cassandra 还帮助了许多企业实现网络规模的扩展。 关于其可扩展性的介绍在其主页上有很多惊人的数字 。 其中一个最大的产品部署者是苹果公司,有超过  个节点存储超过 10pb 的数据。其他大的 cassandra 使用者包括 netflix (2500 节点,420 tb,每天超过万亿的请求量),中国的搜索引擎宜搜 (270 节点,300 tb,每天超过 8 亿请求),ebay (超过 100 节点, 250 tb)。 其中一个最大的产品部署者是苹果公司,有超过  个节点存储超过 10pb 的数据。其他大的 cassandra 使用者包括 netflix (2500 节点,420 tb,每天超过万亿的请求量),中国的搜索引擎宜搜 (270 节点,300 tb,每天超过 8 亿请求),ebay (超过 100 节点, 250 tb)。  中是否支持？ 是。 spring data 中是否支持？ 是,通过 spring data cassandra . 福利: nosqlunit 和 jhipster 已支持,hibernate orm 的支持正在进行中。 neo4j neo4j 可以作为基于 gpl3 许可的"社区版"使用,带有 affero gpl 下的一些扩展。社区版被限制只能在一个节点上运行,并且不包括对集群或热备份的支持。neo4j 的"企业版"支持横向扩展,内存页缓存和热备份。可以试用 30 天,没有提供定价。 neo4j 是众所周知的图数据库,所有内容都是以一个边,节点,或者一个属性的方式存储。版本 1.0 在 2010 年二月份发布,自此以来由 neo4j 公司开发。它的 大客户 包括 walmart, airbnb, monsanto, 和ebay. 是否在 上可以使用？ 是。 spring data 是否支持 neo4j ？ 是的,通过 spring data neo4j . 加分项:hibernate orm 和 nosqlunit 也支持 neo4j postgresql json postgresql 是一种传统的关系数据库管理系统(rdbms),它通过其本地的 json 支持(在版本 9.2 中添加)来支持 nosql。 在 9.4 中,他们添加了对二进制 json(也称为 jsonb )和索引的支持。 leigh halliday 在 2017 年 6 月的博文中解释了 如何释放在 postgres 中存储 json 的功能。halliday进一步展示了如何使用 r by on rails。 一篇来自 umair shahid 的博文展示了 如何使用 java 处理 postgresql json 和 jsonb 数据 。 我不确定 postgresql 及其 json 支持是否应该被包括在推荐的 nosql 选项中。 但如果你已经在使用 postgresql,并希望使你的数据架构能更自由流畅,那可以尝试这么做。 正如 dj walker-morgan 所说 :"postgresql 9.5 不是你的下一个会选 json 数据库,但它是一个非常好的关系数据库,具有完整的 json 特性。" 在  是否可用？ 是的。 是否由 spring 数据支撑？ 是的,通过 spring data jpa 。 结束语 我对这个分析的结果感觉很满意,作为 jhipster 项目的提交者,我非常清楚该团队的实力,并认为它对 mongodb 和 cassandra 的支持就是对它们最好的认可。并且 增加对 co chbase 的 支持的工作也在进行中。 此外,我还与我熟知的 java 和 nosql 社区中几位专家分享了这一情况,并向他们询问了以下问题: 您是否同意我选出的前 5 个 nosql 选项(mongodb,redis,cassandra,neo4j 和 postgresql 及其 json 支持)？ 在生产中使用这些数据库有什么好的坏的故事或经验分享吗？ 在这些数据库中,有没有特别难以开始使用或者在长期使用过程中难以维护的？ 你最喜欢的 nosql 数据库是什么？ 还有什么你想分享的？ 我将在几周后公布采访结果。届时我将会在博客中更新。如果你是 nosql 数据库的专家,欢迎与我取得联系！我很乐意将您的答案纳入面试。你只需发送消息到 twitter 的 @mraible 或  。 研究与笔结果记录 itb sinessedge 有关于 nosql 数据库 前五名 的幻灯片。 然而,那篇文章没有日期,它声明是 redis labs 做出的选择。该幻灯片列出了 mongodb、 cassandra、 redis、 cassandra、 co chdb 和 hbase。 kdn ggets 的编辑 matthew mayo ,在2016年6月写了一篇关于 顶级 nosql 数据库引擎 的类似文章。mayo 使用了  排名 和 google 趋势选出了前五名:mongodb、 cassandra、 redis、 hbase 和 neo4j。 hackernoon 有一个"值得你注意"的 最受欢迎的 nosql 数据库的信息图表 。那篇文章发布于2017年6月,评论说排名是基于  的 统计数据。 注意: 如果你今天(2017年9月6日)查看此排名,你会看到 redis 已经取代了 co chbase。似乎hackernoon 超过了 redis？它还产生了一个问题:elasticsearch 是 nosql 数据库还是搜索引擎？solr 应该被认为是 nosql 数据库吗？两者均出现在 db-engines 排名趋势 中。 jaxenter 在2017年3月30日发布了他们对 顶级数据库趋势 的年度调查结果。他们将 elasticsearch 和 solr 列为数据库。他们还将 apache spark 和 hadoop 包括在内。mongodb、 cassandra、 redis 和 neo4j 是最有趣的 "nosql" 数据库。hazelcast 被列为顶级内存数据网格,位于 co chdb 和 oracle 之上。