社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  NoSql

面向 Java 开发者的 NoSQL 选项

开源中国 • 6 年前 • 787 次点击  


因为了解和喜欢 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 显示出的是排行榜的竞争者外,并没有新奇发现。

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


GitHub Stars

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

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

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


Stack Overflow 标签

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

Docker Pulls

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

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


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 年由 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

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

PostgreSQL JSON

PostgreSQL 是一种传统的关系数据库管理系统(RDBMS),它通过其本地的 JSON 支持(在版本 9.2 中添加)来支持 NoSQL。 在 9.4 中,他们添加了对二进制 JSON(也称为JSONB)和索引的支持。

Leigh Halliday 在 2017 年 6 月的博文中解释了如何释放在 Postgres 中存储 JSON 的功能。Halliday进一步展示了如何使用 Ruby on Rails。 一篇来自 Umair Shahid 的博文展示了如何使用 Java 处理 PostgreSQL JSON 和 JSONB 数据

我不确定 PostgreSQL 及其 JSON 支持是否应该被包括在推荐的 NoSQL 选项中。 但如果你已经在使用 PostgreSQL,并希望使你的数据架构能更自由流畅,那可以尝试这么做。 正如 Dj Walker-Morgan 所说:“PostgreSQL 9.5 不是你的下一个会选 JSON 数据库,但它是一个非常好的关系数据库,具有完整的 JSON 特性。”

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

  • 是否由 Spring 数据支撑?是的,通过 Spring Data JPA


结束语


我对这个分析的结果感觉很满意,作为 JHipster 项目的提交者,我非常清楚该团队的实力,并认为它对 MongoDB 和 Cassandra 的支持就是对它们最好的认可。并且增加对 Couchbase 的支持的工作也在进行中。

此外,我还与我熟知的 Java 和 NoSQL 社区中几位专家分享了这一情况,并向他们询问了以下问题:

  1. 您是否同意我选出的前 5 个 NoSQL 选项(MongoDB,Redis,Cassandra,Neo4j 和 PostgreSQL 及其 JSON 支持)?

  2. 在生产中使用这些数据库有什么好的坏的故事或经验分享吗?

  3. 在这些数据库中,有没有特别难以开始使用或者在长期使用过程中难以维护的?

  4. 你最喜欢的 NoSQL 数据库是什么?

  5. 还有什么你想分享的?

我将在几周后公布采访结果。届时我将会在博客中更新。如果你是 NoSQL 数据库的专家,欢迎与我取得联系!我很乐意将您的答案纳入面试。你只需发送消息到 Twitter 的 @mraible 或 matt.raible@okta.com

研究与笔结果记录


ITBusinessEdge 有关于 NoSQL 数据库前五名的幻灯片。 然而,那篇文章没有日期,它声明是 Redis Labs 做出的选择。该幻灯片列出了 MongoDB、 Cassandra、 Redis、 Cassandra、 CouchDB 和 HBase。

KDnuggets 的编辑 Matthew Mayo,在2016年6月写了一篇关于顶级 NoSQL 数据库引擎的类似文章。Mayo 使用了 db-engines.com 排名 和 Google 趋势选出了前五名:MongoDB、 Cassandra、 Redis、 HBase 和 Neo4j。

Hackernoon 有一个“值得你注意”的最受欢迎的 NoSQL 数据库的信息图表 。那篇文章发布于2017年6月,评论说排名是基于 https://db-engines.com/en/ranking_trend 的统计数据。

注意:如果你今天(2017年9月6日)查看此排名,你会看到 Redis 已经取代了 Couchbase。似乎Hackernoon 超过了 Redis?它还产生了一个问题:Elasticsearch 是 NoSQL 数据库还是搜索引擎?Solr 应该被认为是 NoSQL 数据库吗?两者均出现在 DB-Engines 排名趋势中。

JAXenter 在2017年3月30日发布了他们对顶级数据库趋势的年度调查结果。他们将 Elasticsearch 和 Solr 列为数据库。他们还将 Apache Spark 和 Hadoop 包括在内。MongoDB、 Cassandra、 Redis 和 Neo4j 是最有趣的 “NoSQL” 数据库。Hazelcast 被列为顶级内存数据网格,位于 CouchDB 和 Oracle 之上。



推荐阅读

Python 赶超 Java,JavaScript 稳坐第一 | GitHub 年度开发者报告

Kotlin 将超越 Java 成为 Android 开发的第一语言?

八款值得尝试的精美的 Linux 发行版(2017 版)

安卓 10 岁了:这些消失的经典 APP 你还记得吗?

点击“阅读原文”查看更多精彩内容


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/0vmumfN2P5
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/3766
 
787 次点击