java - 从同一台机器访问最快的 NoSql 数据库是哪个?

标签 java database multithreading redis nosql

在我的用例中,数据相对较小(~1000.000 个字符串),但我必须从多线程环境(在纯 Java 中实现)中尽可能快地访问(每一纳秒都很重要) 目前我正在使用 redis(在本地主机中),我基本上对它很满意,但我想知道是否有更好的选择,因为 redis 拥有所有网络的东西,而且不是设计的对于多线程的东西。对于我的用例,持久性的优先级也很低。

  • 我想在同一台机器上运行(完全没有网络)
  • 我想尽可能快
  • Relativity 小数据(我目前的 Redis 实例内存最大约 20MB)

我不想:

  • 使用 NoSql 数据库以外的其他解决方案。

最佳答案

有很多很棒的 NoSQL 数据库可以用作键值存储。每个人都有独特的能力。

Redis 在单个服务器中表现出色,并且非常容易安装和使用。但是,当您的数据增长超出单个服务器时,Redis 变得难以分片和管理。

Thumbtack Technologies(纽约市)发布了两份白皮书,比较了 MongoDB、Cassandra 和 Aerospike 的性能和可靠性。这些论文非常客观,基准测试是使用 YCSB 基准测试工具完成的,并且是在相同的硬件上进行的。

使用哪一个取决于您的需要。 MongoDB 是一个功能丰富的键值存储,具有许多不错的程序员功能。它提供对二级索引的查询,是一个非常好的文档存储。它是一个内存数据库,因此您的所有数据都必须适合 RAM。 Mongo 可以集群,我听说如果集群很大,管理起来会很棘手。

CouchBase 非常适合存储大量数据,其中一部分数据缓存在 RAM 中。因此,如果您所追求的值在缓存工作集中,它会非常快。如果您的用例主要处理热数据并且访问冷数据的频率较低,那么这很好。

Cassandra 非常适合“重写”用例。它易于使用,是一种很好的程序员体验。它是用 Java 编写的,在执行 GC 时会定期暂停,因此您需要调整 GC 参数。

Aerospike 适用于在少量服务器中存储大量数据。它拥有个位数毫秒(或更好)的延迟、高可用性和高可靠性,而且它可能是(恕我直言)最容易维护和扩展的。它是多代码感知、NUMA 节点感知并具有 self 修复的零接触集群技术。它非常适合需要快速且可预测地访问任何记录的“实时”用例。 Aerospike 是我的最爱。

Cassandra、CouchBase、MongoDB 和 Aerospike 都具有“分析”功能,您选择哪一个取决于用例和您的性能范围。

关于java - 从同一台机器访问最快的 NoSql 数据库是哪个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23111606/

相关文章:

java - 将完整的 Maven 远程存储库下载到本地存储库?

java - 如何在 Apache Ignite 2.1 中列出一个缓存内的所有缓存名称和所有列名称?

sql - 通过重复的层次结构检查连接查询

MySQL - 我可以 RIGHT JOIN 值列表吗?

java - Java 中 ThreadLocal 的真实用法

java - for 循环中 i++ 部分的死代码警告

java - 您如何确定CLASS是否是Spring代理?

MySQL:循环遍历数据库并在其上运行存储过程

multithreading - 通常为一个线程保留多少堆栈空间? (POSIX/OSX)

java - quartz 工作比。立即执行一次性任务的线程