跑字典用服务器吗 ArangoDBCassandraDynamoDB

因为我了解并热爱 Java 社区,所以我正在为全世界的 Java 开发人员写这篇文章,尽管很少有人将 NoSQL 与一门语言联系起来。在本文中,我将向您展示几个 NoSQL 数据库。之后,我会根据项目中的实际使用情况,在 Github stars 和 Stack Overflow 标签上挑选最常用的五个。我会告诉你他们是否支持 Spring Data 和 SpringBoot。

为什么使用 NoSQL?

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

选择 NoSQL 的候选人

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

8 月中旬,我向我的追随者发推文说我正在写这篇文章。我询问了对 NoSQL 数据库的正面或负面评价,并收到了人们的反馈,其中包含一些我希望我涵盖的选项。

我收到了很多建议,按字母顺序排列如下:

ArangoDB

卡桑德拉

沙发底座

动态数据库

动物数据库

榛树

MongoDB

Neo4j

PostgreSQL JSON

雷迪斯

(JetBrains) Xodus

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

请注意,我没有收到任何包含 CouchDB、HBase、Elasticsearch 或 Solr 的请求。由于名称相似,CouchDB 和 Couchbase 经常被混淆,但它们却截然不同。由于 CouchDB 是一个文件存储数据库,因此我将其包含在我的排名中。我还添加了 ITBusinessEdge、KDnuggets 和 DB-Engines(在研究和评论部分)中提到的 HBase。我没有包括 Elasticsearch 或 Solr,因为我相信它们不常用作主数据存储。

Raible的分拣技术

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

Indeed 上的职位数量

我在 Indeed Jobs 上进行了与地理位置无关的搜索,除了亚马逊的 DynamoDB 显示了一个排行榜竞争者之外,没有发现任何新内容。

注意:使用“PostgreSQL JSON”作为搜索词很难获得准确的结果,因为许多职位发布都需要“PostgreSQL”,而不是它的 NoSQL 支持。所以我搜索了“postgres+json”。Xodus 是公司名称,因此我添加了关键字“JetBrains”以保持结果准确。

GitHub 星星

我搜索并找到了 5 个顶级(最多明星)NoSQL 项目,Redis、MongoDB、ArangoDB、Neo4j 和 Cassandra。

注意:Cassandra、HBase 和 PostgreSQL 是镜像库。DynamoDB、Couchbase 和 FaunaDB 没有托管在 GitHub 上,所以我根据它们的 Java 驱动程序来计算它们。为每个项目的 Java 驱动项目统计星数是个好主意,但 Redis 只有 11 星。

你可以通过蒂姆·钱的历史明星项目来看看这5个项目的明星成长。

堆栈溢出标签

我在 StackOverflow 上搜索了上述每个数据库标签,发现 MongoDB 和 PostgreSQL 最受欢迎,其次是 Neo4j、Cassandra 和 Redis。

码头工人拉

我在 Docker Hub 上搜索了相关图片,可以看到少数数据库的 Docker Pull 超过 1000 万,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 框架的观察,从 2016 年 9 月到 2017 年 6 月,Spring Boot 的采用率增加了 76%。

自 6 月以来增长并未放缓:2017 年 8 月 Maven 下载量为 2220 万次。

MongoDB

MongoDB 由 DoubleClick、ShopWiki 和 Gilt Groupe 的高级技术人员于 2007 年构建。它的源代码在 Apache 和 GNU-APGL 许可下的 GitHub 上。它的许多大客户包括 Adob​​e、eBay 和 eHarmony。

雷迪斯

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

卡桑德拉

Cassandra 是“一种用于管理结构化数据的分布式存储系统,旨在支持扩展到大数量级的商品服务器并避免单点故障”(引自“Cassandra – P2P 网络中的结构化架构”)存储系统”上Facebook 的工程博客)。Facebook 最初开发 Cassandra 是为了增强其收件箱搜索功能。其创始人 Avinash Lakshman(Amazon DynamoDB 的创始人)和 Prashant Malik 于 2008 年 7 月将其作为开源项目发布。2009 年 3 月,Cassandra 成为 Apache孵化器项目,2010年2月成为顶级项目。

除了 Facebook,Cassandra 还帮助许多企业实现了 Web 规模的扩展。关于其可扩展性的介绍在其主页上有很多惊人的数字。

最大的产品部署者之一是 Apple,拥有超过 75,000 个节点,存储超过 10PB 的数据。其他大型 Cassandra 用户包括 Netflix(2500 个节点,420 TB,每天超过一万亿个请求),中国搜索引擎一搜(270 个节点跑字典用服务器吗,300 TB,每天超过 8 亿个请求),eBay(超过 100 个节点,250 TB)。

Neo4j

Neo4j 以 GPL3 许可的“社区版”形式提供,在 Affero GPL 下具有一些扩展。Community Edition 仅限于在一个节点上运行,不包括对集群或热备份的支持。Neo4J的“企业版”支持水平扩展、内存页面缓存和热备份。提供 30 天试用,不提供定价。

Neo4j 是一个著名的图数据库,一切都存储为边、节点或属性。1.0 版本于 2010 年 2 月发布,此后一直由 Neo4j 开发。其大客户包括沃尔玛、Airbnb、孟山都和 eBay。

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 功能。”

结束语

我对这个分析的结果很满意,作为 JHipster 项目的提交者,我很清楚团队的实力,并认为它对 MongoDB 和 Cassandra 的支持是对他们的认可。并且正在努力增加对 Couchbase 的支持。

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

你同意我挑选的前 5 个 NoSQL 选项(MongoDB、Redis、Cassandra、Neo4j 和 PostgreSQL 以及它们的 JSON 支持)吗?

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

这些数据库中是否有任何特别难以开始或长期维护的数据库?

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

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论