QuillNEW

RavenDB
Performance Overview

This page presents a clear picture of how well RavenDB performs crucial tasks such as CRUD operations, queries, and indexing. Spoiler alert: We’re elated with the results!

To be able to estimate how RavenDB will perform in your environment, see performance statistics under various load demands, disk types, instance types, and platforms.

CRUD

In these scenarios, we measure the performance of loads, creates, and updates using different operations available via the RavenDB Session Class, and using the RavenDB REST API.

Store

This scenario stores 100K Company documents using our bulk docs endpoint with a batch size set to 50 documents. The batches of documents are added serially in a single thread manner and more load can be added to the server. This endpoint is a foundation of the RavenDB Client API and is used by the Session.

You can read more about it here.

We measure the machine performance and the duration of the scenario.

The graph shows the number of documents imported per second. It highlights that this scenario puts significant stress on the disk. As a result, NVMe disks have a considerable advantage here. Apart from this, there are no major differences between the machine types.

Cluster size
3 node
Data set size
100k Documents
Docs/sec by configuration
ConfigurationSSD 3K IOPS, 125MB/sSSD 10K IOPS, 160MB/sNVME Nitro SSD 40K IOPS, 1250 MB/s
2vCPU 8GB RAM2702 Docs/sec, duration 37 sec, AWS m5 large, 2 vCPU, memory 8, burstable: false, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s3448 Docs/sec, duration 29 sec, AWS m5 large, 2 vCPU, memory 8, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
2vCPU 16GB RAM2778 Docs/sec, duration 36 sec, AWS r5 large, 2 vCPU, memory 16, burstable: false, disk gp3, disk IOPS 3000, disk max throughput up to 125 MB/s3846 Docs/sec, duration 26 sec, AWS r5 large, 2 vCPU, memory 16, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/s5000 Docs/sec, duration 20 sec, AWS i4i large, 2 vCPU, memory 16, burstable: false, disk NVME, disk IOPS 40000, disk max throughput up to 1250 MB/s
4vCPU 16GB RAM2380 Docs/sec, duration 42 sec, AWS t3 xlarge, 4 vCPU, memory 16, burstable: true, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s3448 Docs/sec, duration 29 sec, AWS t3 xlarge, 4 vCPU, memory 16, burstable: true, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
8vCPU 32GB RAM2564 Docs/sec, duration 39 sec, AWS m5 2xlarge, 8 vCPU, memory 32, burstable: false, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s3846 Docs/sec, duration 26 sec, AWS m5 2xlarge, 8 vCPU, memory 32, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
16vCPU 64GB RAM2631 Docs/sec, duration 38 sec, AWS m5 4xlarge, 16 vCPU, memory 64, burstable: false, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s4000 Docs/sec, duration 25 sec, AWS m5 4xlarge, 16 vCPU, memory 64, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a

Bulk Insert

This scenario inserts 1M Company documents using the Bulk Insert API. It is very useful for migration or importing purposes of large bulks of data. The batches of documents are added serially in a single thread manner and more load can be added to the server.

You can read more about it here.

We measure the machine performance and the duration of the scenario.

The graph shows the number of documents imported per second. It highlights that this scenario puts significant stress on the disk. As a result, NVMe disks have a considerable advantage here. Apart from this, there are no major differences between the machine types.

Cluster size
1 node
Data set size
1M Documents
Data disk size
1.12GB
Document size
450 bytes
Docs/sec by configuration
ConfigurationSSD 3K IOPS, 125MB/sSSD 10K IOPS, 160MB/sNVME Nitro SSD 40K IOPS, 1250 MB/s
2vCPU 8GB RAM37037 Docs/sec, duration 27 sec, AWS m5 large, 2 vCPU, memory 8, burstable: false, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s41666 Docs/sec, duration 24 sec, AWS m5 large, 2 vCPU, memory 8, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
2vCPU 16GB RAM38462 Docs/sec, duration 26 sec, AWS r5 large, 2 vCPU, memory 16, burstable: false, disk gp3, disk IOPS 3000, disk max throughput up to 125 MB/s43478 Docs/sec, duration 23 sec, AWS r5 large, 2 vCPU, memory 16, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/s52631 Docs/sec, duration 19 sec, AWS i4i large, 2 vCPU, memory 16, burstable: false, disk NVME, disk IOPS 40000, disk max throughput up to 1250 MB/s
4vCPU 16GB RAM37037 Docs/sec, duration 27 sec, AWS t3 xlarge, 4 vCPU, memory 16, burstable: true, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s41666 Docs/sec, duration 24 sec, AWS t3 xlarge, 4 vCPU, memory 16, burstable: true, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
8vCPU 32GB RAM40000 Docs/sec, duration 25 sec, AWS m5 2xlarge, 8 vCPU, memory 32, burstable: false, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s43478 Docs/sec, duration 23 sec, AWS m5 2xlarge, 8 vCPU, memory 32, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
16vCPU 64GB RAM40000 Docs/sec, duration 25 sec, AWS m5 4xlarge, 16 vCPU, memory 64, burstable: false, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s47619 Docs/sec, duration 21 sec, AWS m5 4xlarge, 16 vCPU, memory 64, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a

Random Loads

This scenario gives you an overview of random read operations on 6M User documents from the StackOverflow database. The commands are executed against the server using the REST API without client overhead. The same endpoint is used by our Client API to perform the Load operations.

You can read more about it here.

The 99% percentile of requests latency is under 34 ms.
The average request latency is 7 ms.

The graph shows the number of requests per second, indicating that this scenario is CPU-bound. Machines with better CPUs, like the 2vCPU 16GB RAM machine with NVMe disk, or those with more cores, allow us to retrieve more documents.

Cluster size
1 node
Data set
Stackoverflow Database
Data set size
6M Users documents
Sampling time
1 min
Reqs/sec by configuration
ConfigurationSSD 3K IOPS, 125MB/sSSD 10K IOPS, 160MB/sNVME Nitro SSD 40K IOPS, 1250 MB/s
2vCPU 8GB RAM27915 Reqs/sec, duration 60 sec, AWS m5 large, 2 vCPU, memory 8, burstable: false, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s27972 Reqs/sec, duration 60 sec, AWS m5 large, 2 vCPU, memory 8, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
2vCPU 16GB RAM29968 Reqs/sec, duration 60 sec, AWS r5 large, 2 vCPU, memory 16, burstable: false, disk gp3, disk IOPS 3000, disk max throughput up to 125 MB/s29910 Reqs/sec, duration 60 sec, AWS r5 large, 2 vCPU, memory 16, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/s37956 Reqs/sec, duration 60 sec, AWS i4i large, 2 vCPU, memory 16, burstable: false, disk NVME, disk IOPS 40000, disk max throughput up to 1250 MB/s
4vCPU 16GB RAM29967 Reqs/sec, duration 60 sec, AWS t3 xlarge, 4 vCPU, memory 16, burstable: true, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s29969 Reqs/sec, duration 60 sec, AWS t3 xlarge, 4 vCPU, memory 16, burstable: true, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
8vCPU 32GB RAM69915 Reqs/sec, duration 60 sec, AWS m5 2xlarge, 8 vCPU, memory 32, burstable: false, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s69779 Reqs/sec, duration 60 sec, AWS m5 2xlarge, 8 vCPU, memory 32, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
16vCPU 64GB RAM79751 Reqs/sec, duration 60 sec, AWS m5 4xlarge, 16 vCPU, memory 64, burstable: false, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s79900 Reqs/sec, duration 60 sec, AWS m5 4xlarge, 16 vCPU, memory 64, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a

Import Dump File

This scenario measures the time taken to import a file with 6M User documents from the Stackoverflow database. In real-world applications this scenario occurs when restoring a database from a backup.

You can read more about it here.

We measure the machine performance and the duration of the scenario.

The graph shows the number of documents imported per second. This scenario is mostly CPU-bound, where machines with more cores allow us to retrieve more documents. Upgrading to a better disk improves performance by about 7%. However, using an NVMe type disk significantly boosts performance by roughly 21% for a 2vCPU 16GB RAM machine.

Cluster size
1 node
Data set
Stackoverflow Database
Data set size
6M Users documents
Docs/sec by configuration
ConfigurationSSD 3K IOPS, 125MB/sSSD 10K IOPS, 160MB/sNVME Nitro SSD 40K IOPS, 1250 MB/s
2vCPU 8GB RAM44024 Docs/sec, duration 136 sec, AWS m5 large, 2 vCPU, memory 8, burstable: false, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s46413 Docs/sec, duration 129 sec, AWS m5 large, 2 vCPU, memory 8, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
2vCPU 16GB RAM45704 Docs/sec, duration 131 sec, AWS r5 large, 2 vCPU, memory 16, burstable: false, disk gp3, disk IOPS 3000, disk max throughput up to 125 MB/s46776 Docs/sec, duration 128 sec, AWS r5 large, 2 vCPU, memory 16, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/s57022 Docs/sec, duration 105 sec, AWS i4i large, 2 vCPU, memory 16, burstable: false, disk NVME, disk IOPS 40000, disk max throughput up to 1250 MB/s
4vCPU 16GB RAM55437 Docs/sec, duration 108 sec, AWS t3 xlarge, 4 vCPU, memory 16, burstable: true, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s58128 Docs/sec, duration 103 sec, AWS t3 xlarge, 4 vCPU, memory 16, burstable: true, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
8vCPU 32GB RAM58128 Docs/sec, duration 103 sec, AWS m5 2xlarge, 8 vCPU, memory 32, burstable: false, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s64379 Docs/sec, duration 93 sec, AWS m5 2xlarge, 8 vCPU, memory 32, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
16vCPU 64GB RAM64379 Docs/sec, duration 93 sec, AWS m5 4xlarge, 16 vCPU, memory 64, burstable: false, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s68819 Docs/sec, duration 87 sec, AWS m5 4xlarge, 16 vCPU, memory 64, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a

Queries

In these scenarios, we measure the performance of querying the database using various types of queries.

All queries are sent in parallel in 8 threads (using the wrk tool). All queries are querying on precalculated static indexes, and without using the caching abilities of RavenDB, which would make the queries even faster.

Query for a single record

In this scenario we are measuring the performance of a query with a ‘where’ clause against a predefined index with 454K entries.
The command is using the Query API capability without client overhead. The same endpoint is used by the querying mechanism in our Client API.

You can read more about it here.

The 99% percentile of queries latency is under 40 ms.
The average query latency is 10.54 ms.

The graph shows the number of requests per second. This scenario is CPU-bound since the dataset fits into memory. More cores allow us to retrieve more documents, making the disk type less significant. However, for a 2vCPU 16GB RAM machine with an NVMe disk, we get slightly better performance due to the superior CPU.

Cluster size
1 node
Data set
Stackoverflow Database
Data set size
1.01M documents – 562K Questions, 454K Users
Sampling time
1 min
from index 'Users/DisplayNames'
where DisplayName = "user3654819"
select Views
from user in docs.Users
select new {
user.DisplayName
}
Reqs/sec by configuration
ConfigurationSSD 3K IOPS, 125MB/sSSD 10K IOPS, 160MB/sNVME Nitro SSD 40K IOPS, 1250 MB/s
2vCPU 8GB RAM8495 Reqs/sec, duration 60 sec, AWS m5 large, 2 vCPU, memory 8, burstable: false, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s8495 Reqs/sec, duration 60 sec, AWS m5 large, 2 vCPU, memory 8, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
2vCPU 16GB RAM8996 Reqs/sec, duration 60 sec, AWS r5 large, 2 vCPU, memory 16, burstable: false, disk gp3, disk IOPS 3000, disk max throughput up to 125 MB/s8979 Reqs/sec, duration 60 sec, AWS r5 large, 2 vCPU, memory 16, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/s11969 Reqs/sec, duration 60 sec, AWS i4i large, 2 vCPU, memory 16, burstable: false, disk NVME, disk IOPS 40000, disk max throughput up to 1250 MB/s
4vCPU 16GB RAM12790 Reqs/sec, duration 60 sec, AWS t3 xlarge, 4 vCPU, memory 16, burstable: true, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s12990 Reqs/sec, duration 60 sec, AWS t3 xlarge, 4 vCPU, memory 16, burstable: true, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
8vCPU 32GB RAM37946 Reqs/sec, duration 60 sec, AWS m5 2xlarge, 8 vCPU, memory 32, burstable: false, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s37835 Reqs/sec, duration 60 sec, AWS m5 2xlarge, 8 vCPU, memory 32, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
16vCPU 64GB RAM49844 Reqs/sec, duration 60 sec, AWS m5 4xlarge, 16 vCPU, memory 64, burstable: false, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s49941 Reqs/sec, duration 60 sec, AWS m5 4xlarge, 16 vCPU, memory 64, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a

Query using date range and paging

In this scenario we are measuring the performance of a query with a ‘where’ clause on a DateTime field, against a predefined index with 454K entries. This is a range query with many unique terms.
The command is using the Query API capability without client overhead. The same endpoint is used by the querying mechanism in our Client API.

You can read more about it here.

The 99% percentile of queries latency is under 93 ms.
The average query latency is 87 ms.

The graph shows the number of requests per second. This scenario is CPU-bound since the dataset fits into memory. More cores allow us to retrieve more documents, making the disk type less significant. However, for a 2vCPU 16GB RAM machine with an NVMe disk, we get slightly better performance due to the superior CPU.

Cluster size
1 node
Data set
Stackoverflow Database
Data set size
1.01M documents – 562K Questions, 454K Users
Sampling time
1 min
from index 'Questions/ByCreationDateAndTags'
where Tags = "html"
and CreationDate between
'2013-04-30T00:00:00.0000000Z'
and '2013-05-30T00:00:00.0000000Z'
limit 0, 10
from q in docs.Questions
select new {
CreationDate = q.CreationDate,
Tags = q.Tags
}
Reqs/sec by configuration
ConfigurationSSD 3K IOPS, 125MB/sSSD 10K IOPS, 160MB/sNVME Nitro SSD 40K IOPS, 1250 MB/s
2vCPU 8GB RAM1499 Reqs/sec, duration 60 sec, AWS m5 large, 2 vCPU, memory 8, burstable: false, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s1499 Reqs/sec, duration 60 sec, AWS m5 large, 2 vCPU, memory 8, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
2vCPU 16GB RAM1649 Reqs/sec, duration 60 sec, AWS r5 large, 2 vCPU, memory 16, burstable: false, disk gp3, disk IOPS 3000, disk max throughput up to 125 MB/s1650 Reqs/sec, duration 60 sec, AWS r5 large, 2 vCPU, memory 16, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/s2000 Reqs/sec, duration 60 sec, AWS i4i large, 2 vCPU, memory 16, burstable: false, disk NVME, disk IOPS 40000, disk max throughput up to 1250 MB/s
4vCPU 16GB RAM2799 Reqs/sec, duration 60 sec, AWS t3 xlarge, 4 vCPU, memory 16, burstable: true, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s2801 Reqs/sec, duration 60 sec, AWS t3 xlarge, 4 vCPU, memory 16, burstable: true, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
8vCPU 32GB RAM6499 Reqs/sec, duration 60 sec, AWS m5 2xlarge, 8 vCPU, memory 32, burstable: false, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s6499 Reqs/sec, duration 60 sec, AWS m5 2xlarge, 8 vCPU, memory 32, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
16vCPU 64GB RAM11992 Reqs/sec, duration 60 sec, AWS m5 4xlarge, 16 vCPU, memory 64, burstable: false, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s11988 Reqs/sec, duration 60 sec, AWS m5 4xlarge, 16 vCPU, memory 64, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a

Query by Multiple Facets

In this scenario we are measuring the performance of a ‘faceted’ query against a predefined index with 562K entries.
The command is using the Query API capability without client overhead. The same endpoint is used by the querying mechanism in our Client API.

You can read more about it here.

The 99% percentile of queries latency is under 65 ms.
The average query latency is 7 ms.

The graph shows the number of requests per second. This scenario is CPU-bound since the dataset fits into memory. More cores allow us to retrieve more documents, making the disk type less significant. However, for a 2vCPU 16GB RAM machine with an NVMe disk, we get slightly better performance due to the superior CPU.

Cluster size
1 node
Data set
Stackoverflow Database
Data set size
1.01M documents – 562K Questions, 454K Users
Sampling time
1 min
from index 'Questions/TagsFaceted'
where Tags = "tdbgrid"
select facet(Year, sum(ViewCount)),
facet(AnswersCount < 1,
AnswersCount between 1 and 10,
AnswersCount > 10)
from u in docs.Questions
select new
{
Year = u.CreationDate.Year,
ViewCount = u.ViewCount,
Tags = u.Tags.Select(a => a),
AnswersCount = u.Answers.Length
}
Reqs/sec by configuration
ConfigurationSSD 3K IOPS, 125MB/sSSD 10K IOPS, 160MB/sNVME Nitro SSD 40K IOPS, 1250 MB/s
2vCPU 8GB RAM1620 Reqs/sec, duration 60 sec, AWS m5 large, 2 vCPU, memory 8, burstable: false, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s1620 Reqs/sec, duration 60 sec, AWS m5 large, 2 vCPU, memory 8, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
2vCPU 16GB RAM1651 Reqs/sec, duration 60 sec, AWS r5 large, 2 vCPU, memory 16, burstable: false, disk gp3, disk IOPS 3000, disk max throughput up to 125 MB/s1651 Reqs/sec, duration 60 sec, AWS r5 large, 2 vCPU, memory 16, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/s1851 Reqs/sec, duration 60 sec, AWS i4i large, 2 vCPU, memory 16, burstable: false, disk NVME, disk IOPS 40000, disk max throughput up to 1250 MB/s
4vCPU 16GB RAM1800 Reqs/sec, duration 60 sec, AWS t3 xlarge, 4 vCPU, memory 16, burstable: true, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s1800 Reqs/sec, duration 60 sec, AWS t3 xlarge, 4 vCPU, memory 16, burstable: true, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
8vCPU 32GB RAM2500 Reqs/sec, duration 60 sec, AWS m5 2xlarge, 8 vCPU, memory 32, burstable: false, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s2500 Reqs/sec, duration 60 sec, AWS m5 2xlarge, 8 vCPU, memory 32, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
16vCPU 64GB RAM6799 Reqs/sec, duration 60 sec, AWS m5 4xlarge, 16 vCPU, memory 64, burstable: false, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s6799 Reqs/sec, duration 60 sec, AWS m5 4xlarge, 16 vCPU, memory 64, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a

Order by textual field

In this scenario we are measuring the performance of a query with ‘orderby’ on a field with type string, against a predefined index with 562K entries.
The command is using the Query API capability without client overhead. The same endpoint is used by the querying mechanism in our Client API.

You can read more about it here.

The 99% percentile of queries latency is under 65 ms.
The average query latency is 59 ms.

The graph shows the number of requests per second. This scenario is CPU-bound since the dataset fits into memory. More cores allow us to retrieve more documents, making the disk type less significant. However, for a 2vCPU 16GB RAM machine with an NVMe disk, we get slightly better performance due to the superior CPU.

Cluster size
1 node
Data set
Stackoverflow Database
Data set size
1.01M documents – 562K Questions, 454K Users
Sampling time
1 min
from index 'Questions/ByTagsOrderByTitle'
where Tags = "eigenvalue"
order by Year
select AnswerCount limit 0, 47
from question in docs.Questions
select new {
question.Tags,
question.CreationDate.Year,
question.ViewCount
}
Reqs/sec by configuration
ConfigurationSSD 3K IOPS, 125MB/sSSD 10K IOPS, 160MB/sNVME Nitro SSD 40K IOPS, 1250 MB/s
2vCPU 8GB RAM2500 Reqs/sec, duration 60 sec, AWS m5 large, 2 vCPU, memory 8, burstable: false, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s2500 Reqs/sec, duration 60 sec, AWS m5 large, 2 vCPU, memory 8, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
2vCPU 16GB RAM2701 Reqs/sec, duration 60 sec, AWS r5 large, 2 vCPU, memory 16, burstable: false, disk gp3, disk IOPS 3000, disk max throughput up to 125 MB/s2701 Reqs/sec, duration 60 sec, AWS r5 large, 2 vCPU, memory 16, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/s4000 Reqs/sec, duration 60 sec, AWS i4i large, 2 vCPU, memory 16, burstable: false, disk NVME, disk IOPS 40000, disk max throughput up to 1250 MB/s
4vCPU 16GB RAM4999 Reqs/sec, duration 60 sec, AWS t3 xlarge, 4 vCPU, memory 16, burstable: true, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s4999 Reqs/sec, duration 60 sec, AWS t3 xlarge, 4 vCPU, memory 16, burstable: true, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
8vCPU 32GB RAM9998 Reqs/sec, duration 60 sec, AWS m5 2xlarge, 8 vCPU, memory 32, burstable: false, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s9998 Reqs/sec, duration 60 sec, AWS m5 2xlarge, 8 vCPU, memory 32, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
16vCPU 64GB RAM24926 Reqs/sec, duration 60 sec, AWS m5 4xlarge, 16 vCPU, memory 64, burstable: false, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s24973 Reqs/sec, duration 60 sec, AWS m5 4xlarge, 16 vCPU, memory 64, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a

Order by numeric field

In this scenario we are measuring the performance of a query with ‘orderby’ on a field with long type, against a predefined index with 562K entries.
The command is using the Query API capability without client overhead. The same endpoint is used by the querying mechanism in our Client API.

The 99% percentile of queries latency is under 97 ms.
The average query latency is 25 ms.

You can read more about it here.

The graph shows the number of requests per second. This scenario is CPU-bound since the dataset fits into memory. More cores allow us to retrieve more documents, making the disk type less significant. However, for a 2vCPU 16GB RAM machine with an NVMe disk, we get slightly better performance due to the superior CPU

Cluster size
1 node
Data set
Stackoverflow Database
Data set size
1.01M documents – 562K Questions, 454K Users
Sampling time
1 min
from index 'Questions/ByTagsOrderByTitle'
where Tags = "xval"
order by ViewCount as long
select AnswerCount
limit 0, 47
from question in docs.Questions
select new {
question.Tags,
question.CreationDate.Year,
question.ViewCount
}
Reqs/sec by configuration
ConfigurationSSD 3K IOPS, 125MB/sSSD 10K IOPS, 160MB/sNVME Nitro SSD 40K IOPS, 1250 MB/s
2vCPU 8GB RAM2500 Reqs/sec, duration 60 sec, AWS m5 large, 2 vCPU, memory 8, burstable: false, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s2500 Reqs/sec, duration 60 sec, AWS m5 large, 2 vCPU, memory 8, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
2vCPU 16GB RAM2701 Reqs/sec, duration 60 sec, AWS r5 large, 2 vCPU, memory 16, burstable: false, disk gp3, disk IOPS 3000, disk max throughput up to 125 MB/s2701 Reqs/sec, duration 60 sec, AWS r5 large, 2 vCPU, memory 16, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/s4000 Reqs/sec, duration 60 sec, AWS i4i large, 2 vCPU, memory 16, burstable: false, disk NVME, disk IOPS 40000, disk max throughput up to 1250 MB/s
4vCPU 16GB RAM5000 Reqs/sec, duration 60 sec, AWS t3 xlarge, 4 vCPU, memory 16, burstable: true, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s4999 Reqs/sec, duration 60 sec, AWS t3 xlarge, 4 vCPU, memory 16, burstable: true, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
8vCPU 32GB RAM12996 Reqs/sec, duration 60 sec, AWS m5 2xlarge, 8 vCPU, memory 32, burstable: false, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s12997 Reqs/sec, duration 60 sec, AWS m5 2xlarge, 8 vCPU, memory 32, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
16vCPU 64GB RAM27961 Reqs/sec, duration 60 sec, AWS m5 4xlarge, 16 vCPU, memory 64, burstable: false, disk gp3, disk IOPS n/a, disk max throughput up to 125 MB/s27966 Reqs/sec, duration 60 sec, AWS m5 4xlarge, 16 vCPU, memory 64, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a

Indexing

In these scenarios, we measure RavenDB performance during indexing.

Indexing Map-Reduce

In this scenario we are measuring the indexing speed (how many documents a given index is able to process per second) on a Map-Reduce index.
The index performs an aggregation on the Tags from the Questions collection of the Stackoverflow dataset.
Querying this index will return information about the occurrence of Tags (Count), the total number of Answers for each Tag (Answers), and a total number of accepted Answers for each Tag (AcceptedAnswers).

This is a common scenario and a typical usage of a Map-Reduce index to perform an aggregation operation The advantage of doing this in the index, instead of a Query, is that the results are pre-computed and almost no additional operations are needed to satisfy the query, giving you instant results.

You can read more about Map-Reduce indexes here.

The graph shows the number of documents mapped per second, highlighting that this scenario is disk-bound. Using an NVMe type disk significantly boosts performance by roughly 31% for a 2vCPU 16GB RAM machine and even outperforms a 16vCPU 64GB RAM machine with an SSD disk by approximately 26%.

Cluster size
1 node
Data set
Stackoverflow Database
Data set size
1.01M documents – 562K Questions, 454k Users
from q in docs.Questions
from tag in q.Tags
select new {
Tag = tag,
Count = 1,
Answers = q.AnswerCount,
AcceptedAnswers =
q.AcceptedAnswerId !=
null ? 1 : 0
}
from result in results
group result by result.Tag into g
select new {
Tag = g.Key,
Count = Enumerable.Sum(g, x =>
x.Count),
Answers = Enumerable.Sum(g, x0 =>
x0.Answers),
AcceptedAnswers =
Enumerable.Sum(g, x1 =>
x1.AcceptedAnswers)
}
Docs/sec by configuration
ConfigurationSSD 3K IOPS, 125MB/sSSD 10K IOPS, 160MB/sNVME Nitro SSD 40K IOPS, 1250 MB/s
2vCPU 8GB RAM1774 Docs/sec, duration 256 sec, AWS m5 large, 2 vCPU, memory 8, burstable: false, disk gp3, disk IOPS 3000, disk max throughput up to 125 MB/s17470 Docs/sec, duration 26 sec, AWS m5 large, 2 vCPU, memory 8, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
2vCPU 16GB RAM1869 Docs/sec, duration 243 sec, AWS r5 large, 2 vCPU, memory 16, burstable: false, disk gp3, disk IOPS 3000, disk max throughput up to 125 MB/s18168 Docs/sec, duration 25 sec, AWS r5 large, 2 vCPU, memory 16, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/s23906 Docs/sec, duration 19 sec, AWS i4i large, 2 vCPU, memory 16, burstable: false, disk NVME, disk IOPS 40000, disk max throughput up to 1250 MB/s
4vCPU 16GB RAM1966 Docs/sec, duration 231 sec, AWS t3 xlarge, 4 vCPU, memory 16, burstable: true, disk gp3, disk IOPS 3000, disk max throughput up to 125 MB/s15140 Docs/sec, duration 30 sec, AWS t3 xlarge, 4 vCPU, memory 16, burstable: true, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
8vCPU 32GB RAM2046 Docs/sec, duration 222 sec, AWS m5 2xlarge, 8 vCPU, memory 32, burstable: false, disk gp3, disk IOPS 3000, disk max throughput up to 125 MB/s18925 Docs/sec, duration 24 sec, AWS m5 2xlarge, 8 vCPU, memory 32, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
16vCPU 64GB RAM2163 Docs/sec, duration 210 sec, AWS m5 4xlarge, 16 vCPU, memory 64, burstable: false, disk gp3, disk IOPS 3000, disk max throughput up to 125 MB/s18925 Docs/sec, duration 24 sec, AWS m5 4xlarge, 16 vCPU, memory 64, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a

Indexing Map-Reduce by Months

In this scenario we are measuring the indexing speed (how many documents a given index is able to process per second) on a Map-Reduce index.
The index performs an aggregation on the Tags and the CreationDate fields from the Questions collection of the Stackoverflow dataset.
Querying this index will return information about the occurrence of Tags (Count) for a particular Month.

This is a common scenario and typical usage of a Map-Reduce index to perform an aggregation operation. The advantage of doing this in the index, instead of a Query, is that the results are pre-computed and almost no additional operations are needed to satisfy the query, giving you instant results.

The difference of this scenario from the Indexing Map-Reduce scenario above is that the grouping is done on two fields, so we have double work to do, but the performance difference is only ~14% slower.

You can read more about the Map-Reduce indexes here.

The graph shows the number of documents mapped per second, highlighting that this scenario is disk-bound. Using an NVMe type disk significantly boosts performance by roughly 45% for a 2vCPU 16GB RAM machine and outperforms a 16vCPU 64GB RAM machine with an SSD disk by approximately 32%.

Cluster size
1 node
Data set
Stackoverflow Database
Data set size
1.01M documents – 562K Questions, 454K Users
from q in docs.Questions
from tag in q.Tags
select new {
Tag = tag,
Count = 1,
Month = q.CreationDate.ToString("yyyy-MM")
}
from result in results
group result by new {
Tag = result.Tag,
Month = result.Month
} into g
select new {
Month = g.Key.Month,
Tag = g.Key.Tag,
Count = Enumerable.Sum(g, x =>
x.Count)
}
Docs/sec by configuration
ConfigurationSSD 3K IOPS, 125MB/sSSD 10K IOPS, 160MB/sNVME Nitro SSD 40K IOPS, 1250 MB/s
2vCPU 8GB RAM1781 Docs/sec, duration 255 sec, AWS m5 large, 2 vCPU, memory 8, burstable: false, disk gp3, disk IOPS 3000, disk max throughput up to 125 MB/s14194 Docs/sec, duration 32 sec, AWS m5 large, 2 vCPU, memory 8, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
2vCPU 16GB RAM1983 Docs/sec, duration 229 sec, AWS r5 large, 2 vCPU, memory 16, burstable: false, disk gp3, disk IOPS 3000, disk max throughput up to 125 MB/s14194 Docs/sec, duration 32 sec, AWS r5 large, 2 vCPU, memory 16, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/s20646 Docs/sec, duration 22 sec, AWS i4i large, 2 vCPU, memory 16, burstable: false, disk NVME, disk IOPS 40000, disk max throughput up to 1250 MB/s
4vCPU 16GB RAM1916 Docs/sec, duration 237 sec, AWS t3 xlarge, 4 vCPU, memory 16, burstable: true, disk gp3, disk IOPS 3000, disk max throughput up to 125 MB/s11952 Docs/sec, duration 38 sec, AWS t3 xlarge, 4 vCPU, memory 16, burstable: true, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
8vCPU 32GB RAM1941 Docs/sec, duration 233 sec, AWS m5 2xlarge, 8 vCPU, memory 32, burstable: false, disk gp3, disk IOPS 3000, disk max throughput up to 125 MB/s15140 Docs/sec, duration 30 sec, AWS m5 2xlarge, 8 vCPU, memory 32, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
16vCPU 64GB RAM2260 Docs/sec, duration 201 sec, AWS m5 4xlarge, 16 vCPU, memory 64, burstable: false, disk gp3, disk IOPS 3000, disk max throughput up to 125 MB/s15662 Docs/sec, duration 29 sec, AWS m5 4xlarge, 16 vCPU, memory 64, burstable: false, disk io1, disk IOPS 10000, disk max throughput up to 500 MB/sn/a
RavenDB Performance | Compare RavenDB To Alternatives