面向 Java 开发者的 NoSQL 选项

goldenostrich 发布于4天前 阅读38次
0 条评论

因为了解和喜欢 Java 社区,所以尽管很少有人将 NoSQL 与某种语言绑在一起,我也要为全世界的 Java 开发者写下这篇文章。文中,我将为你展示几种 NoSQL 数据库。之后,我将根据实际在 Github  stars 和 Stack Overflow tags 的项目中的使用情况,选出最常用的五个。并且我会让你知道它们是否支持 Spring Data 和 SpringBoot。

为什么使用 NoSQL?

NoSQL 数据库帮助许多互联网公司通过最终一致性实现高可拓展性。因为 NoSQL 数据库通常分布在多台机器上,而且有一些延迟,所以它只保证所有的实例最终都是一致的。最终一致性服务通常被称为 BASE(基本可用,软状态,最终一致性)服务,这点与传统的 ACID 正好相反。

选择 NoSQL 的候选项

定义前五名可能很困难。最近许多人都在尝试这个。请参考本文结尾处的研究和注释部分。

八月中旬,我在推特上告诉我的粉丝,我正在写这篇文章。我询问了关于 NoSQL 数据库的正面或负面的评述,收到了人们的反馈,其中有希望我涵盖的一些选项。

我收到许多建议,以下按字母顺序列出:

  1. ArangoDB

  2. Cassandra

  3. Couchbase

  4. DynamoDB

  5. FaunaDB

  6. Hazelcast

  7. MongoDB

  8. Neo4j

  9. PostgreSQL JSON

  10. Redis

  11. (JetBrains) Xodus

人们还提到 Hibernate OGM(NoSQL 的 JPA)和 NoSQLUnit 来作为帮助访问和测试 NoSQL 数据库的工具。

请注意,我没有收到需要将 CouchDB,HBase,Elasticsearch 或 Solr 包括在内的任何请求。 由于 CouchDB 和 Couchbase 的名称相似,它们经常被混淆,但是它们是完全不一样的。 由于 CouchDB 是一个文件存储数据库,我将其包括在我的排名中。 我还添加了 HBase,因为它在 ITBusinessEdge,KDnuggets 和 DB-Engines 被提到过(在研究和注释部分)。 我没有将 Elasticsearch 或 Solr 包括在内,因为我相信这些并不常用作主数据存储。

Raible 的排序技术

我用 Indeed 上职位数量、GitHub 上 star 数量、Stack Overflow 标签数和 Docker 上 pull 的数量作为指标去开发我的 TOP5 NoSQL 数据库排名系统。

Indeed 上职位数量

我在 Indeed Jobs 上不区分地域搜索,结果除了 Amazon 的 DynamoDB 显示出的是排行榜的竞争者外,并没有新奇发现。

面向 Java 开发者的 NoSQL 选项

NOTE:把“PostgreSQL JSON”做为搜索条件很难得到准确的结果,因为很多招聘信息把“PostgreSQL” 作为一个要求,而不是它对 NoSQL 的支持。因此我搜索“postgres + json”。Xodus 是一家公司的名字,所以我添加“JetBrains”关键字来保证结果的准确。

GitHub Stars

我搜索并找到了 5 个顶级(Star 最多)的 NoSQL 项目,分别是 Redis,MongoDB,ArangoDB,Neo4j 和 Cassandra。

面向 Java 开发者的 NoSQL 选项

注意:Cassandra, HBase 和 PostgreSQL 是镜像库。DynamoDB, Couchbase 和 FaunaDB 没有服务在 GitHub 上,因此,我统计他们的时候是基于他们的 Java 驱动。统计每个项目的 Java 驱动项目的星星数量是个好办法,但是  Redis 只有 11 颗星

你可以使用 Tim Qian 的 历史 star 项目 来查看这 5 个项目的 star 增长情况。

面向 Java 开发者的 NoSQL 选项

Stack Overflow 标签

我在 StackOverflow 中搜索了上述每一个数据库的 tag,发现 MongoDB 和 PostgreSQL 是最受欢迎的,接下来是 Neo4j, Cassandra 和 Redis.

面向 Java 开发者的 NoSQL 选项

Docker Pulls

我在 Docker Hub 上搜索了相关的镜像,可以看到少部分数据库有 1000 万以上的 Docker Pull,Neo4j 有 500 万以上,其他的大多数也有 100 多万, FaunaDB 和 JetBrains Xodus 暂时没有可用的镜像

面向 Java 开发者的 NoSQL 选项

综合来看,这些数据和我的排名关系并不大,我觉得可能有两个原因,数据并不精确而且对于每一个数据库,并没有所谓标准的镜像

NoSQL 选项矩阵

我创建了一个结合了职位数、星数和标签数的矩阵表格。我根据它们在每个类别的排名授予 1-5 分。如果一个选项没有进入前五,就得零分。结果排名前五的是 MongoDB、Redis、Cassandra、Neo4j 和 PostgreSQL,如下表所示。

NoSQL选项 职位 标签 合计
MongoDB 5 4 5 14
Redis 3 5 1 9
Cassandra 4 1 2 7
Neo4j 0 2 3 5
PostgreSQL 0 0 4 4
ArangoDB 0 3 0 3
HBase 2 0 0 2
DynamoDB 1 0 0 1
Couchbase 1 0 0 1
CouchDB 0 0 0 0
Hazelcast 0 0 0 0
JetBrains Xodus 0 0 0 0
FaunaDB 0 0 0 0

DB-Engines 排名的前五个选项是 PostgreSQL、MongoDB、Cassandra、Redis 和 HBase。

面向 Java 开发者的 NoSQL 选项

两个表格的前五排名非常接近!

NoSQL 选项概述

由于我做出的前五个排名结果非常接近于 DB-Engines 的结果,所以我将使用我的前五个结果。下面是对每一个的概述,以及关于它们的 Spring Boot 支持的信息。

你可能会问“为什么是 Spring Boot?” 我的答案很简单:因为 Spring Boot 采用率很高。根据 Redmonk 对 Java 框架的最近的观察 , Spring Boot 采用率从 2016 年 9 月到 2017 年 6 月增长了 76%。

面向 Java 开发者的 NoSQL 选项

自 6 月以来的增长速度并没有减缓: 到 2017 年 8月 Maven 下载量是 2220 万

MongoDB

MongoDB 在 2007 年由 DoubleClick、 ShopWiki 和 Gilt Groupe 的高级技术人员建立。它的源码在 GitHub 上,使用的是 Apache 和 GNU-APGL 许可证。它的众多大客户包括 Adobe、 eBay 和 eHarmony。

  • 在 start.spring.io 上是否可用?是的,包括用于测试的嵌入式 MongoDB 。

  • 是否能在 Spring Data 上获得支持?是的,通过  Spring Data MongoDB

  • 加分项:为 Hibernate OGM、 NoSQLUnit 和  JHipster 所支持。

Redis

Redis 代表 REmote Dictionary Server(远程字典服务器),由 Salvatore Sanfilippo 开创。它最初发布于 2009 年 4 月 10 日根据  redis.io 的描述,Redis 是采用 BSD 许可证的内存式数据结构存储,可以被用作数据库、缓存和消息代理。  使用 Redis 的知名企业 包括 Twitter、 GitHub、 Snapchat 和 Craigslist。

  • 是否在 start.spring.io 上可用? 是。

  • 是否为 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 还帮助了许多企业实现网络规模的扩展。 关于其可扩展性的介绍在其主页上有很多惊人的数字

其中一个最大的产品部署者是苹果公司,有超过 75000 个节点存储超过 10PB 的数据。其他大的 Cassandra 使用者包括 Netflix (2500 节点,420 TB,每天超过万亿的请求量),中国的搜索引擎宜搜 (270 节点,300 TB,每天超过 8 亿请求),eBay (超过 100 节点, 250 TB)。

  • start.spring.io 中是否支持? 是。

  • Spring Data 中是否支持?是,通过  Spring Data Cassandra .

  • 福利:NoSQLUnit 和 JHipster 已支持,Hibernate ORM 的支持正在进行中。

Neo4j 可以作为基于 GPL3 许可的“社区版”使用,带有 Affero GPL 下的一些扩展。社区版被限制只能在一个节点上运行,并且不包括对集群或热备份的支持。Neo4J 的“企业版”支持横向扩展,内存页缓存和热备份。可以试用 30 天,没有提供定价。

Neo4j 是众所周知的图数据库,所有内容都是以一个边,节点,或者一个属性的方式存储。版本 1.0 在 2010 年二月份发布,自此以来由 Neo4j 公司开发。它的 大客户 包括 Walmart, Airbnb, Monsanto, 和eBay.

  • 是否在 start.spring.io上可以使用?是。

  • Spring Data 是否支持 Neo4j ? 是的,通过 Spring Data Neo4j .

  • 加分项:Hibernate ORM 和 NoSQLUnit 也支持 Neo4j

查看原文: 面向 Java 开发者的 NoSQL 选项

  • bigdog
  • whiteleopard
  • bigleopard
  • goldenelephant
  • silverrabbit
  • heavybear
需要 登录 后回复方可回复, 如果你还没有账号你可以 注册 一个帐号。