Oren Eini

aka Ayende Rahien

Oren Eini

CEO of RavenDB

a NoSQL Open Source Document Database

Get in touch with me:

oren@ravendb.net +972 52-548-6969

Posts: 7,575
|
Comments: 51,189

Copyright ©️ Ayende Rahien 2004 — 2025

Privacy Policy · Terms
filter by tags archive
stack view grid view
  • architecture (606) rss
  • bugs (450) rss
  • challanges (123) rss
  • community (377) rss
  • databases (481) rss
  • design (893) rss
  • development (640) rss
  • hibernating-practices (71) rss
  • miscellaneous (592) rss
  • performance (397) rss
  • programming (1085) rss
  • raven (1442) rss
  • ravendb.net (526) rss
  • reviews (184) rss
  • 2025
    • May (7)
    • April (10)
    • March (10)
    • February (7)
    • January (12)
  • 2024
    • December (3)
    • November (2)
    • October (1)
    • September (3)
    • August (5)
    • July (10)
    • June (4)
    • May (6)
    • April (2)
    • March (8)
    • February (2)
    • January (14)
  • 2023
    • December (4)
    • October (4)
    • September (6)
    • August (12)
    • July (5)
    • June (15)
    • May (3)
    • April (11)
    • March (5)
    • February (5)
    • January (8)
  • 2022
    • December (5)
    • November (7)
    • October (7)
    • September (9)
    • August (10)
    • July (15)
    • June (12)
    • May (9)
    • April (14)
    • March (15)
    • February (13)
    • January (16)
  • 2021
    • December (23)
    • November (20)
    • October (16)
    • September (6)
    • August (16)
    • July (11)
    • June (16)
    • May (4)
    • April (10)
    • March (11)
    • February (15)
    • January (14)
  • 2020
    • December (10)
    • November (13)
    • October (15)
    • September (6)
    • August (9)
    • July (9)
    • June (17)
    • May (15)
    • April (14)
    • March (21)
    • February (16)
    • January (13)
  • 2019
    • December (17)
    • November (14)
    • October (16)
    • September (10)
    • August (8)
    • July (16)
    • June (11)
    • May (13)
    • April (18)
    • March (12)
    • February (19)
    • January (23)
  • 2018
    • December (15)
    • November (14)
    • October (19)
    • September (18)
    • August (23)
    • July (20)
    • June (20)
    • May (23)
    • April (15)
    • March (23)
    • February (19)
    • January (23)
  • 2017
    • December (21)
    • November (24)
    • October (22)
    • September (21)
    • August (23)
    • July (21)
    • June (24)
    • May (21)
    • April (21)
    • March (23)
    • February (20)
    • January (23)
  • 2016
    • December (17)
    • November (18)
    • October (22)
    • September (18)
    • August (23)
    • July (22)
    • June (17)
    • May (24)
    • April (16)
    • March (16)
    • February (21)
    • January (21)
  • 2015
    • December (5)
    • November (10)
    • October (9)
    • September (17)
    • August (20)
    • July (17)
    • June (4)
    • May (12)
    • April (9)
    • March (8)
    • February (25)
    • January (17)
  • 2014
    • December (22)
    • November (19)
    • October (21)
    • September (37)
    • August (24)
    • July (23)
    • June (13)
    • May (19)
    • April (24)
    • March (23)
    • February (21)
    • January (24)
  • 2013
    • December (23)
    • November (29)
    • October (27)
    • September (26)
    • August (24)
    • July (24)
    • June (23)
    • May (25)
    • April (26)
    • March (24)
    • February (24)
    • January (21)
  • 2012
    • December (19)
    • November (22)
    • October (27)
    • September (24)
    • August (30)
    • July (23)
    • June (25)
    • May (23)
    • April (25)
    • March (25)
    • February (28)
    • January (24)
  • 2011
    • December (17)
    • November (14)
    • October (24)
    • September (28)
    • August (27)
    • July (30)
    • June (19)
    • May (16)
    • April (30)
    • March (23)
    • February (11)
    • January (26)
  • 2010
    • December (29)
    • November (28)
    • October (35)
    • September (33)
    • August (44)
    • July (17)
    • June (20)
    • May (53)
    • April (29)
    • March (35)
    • February (33)
    • January (36)
  • 2009
    • December (37)
    • November (35)
    • October (53)
    • September (60)
    • August (66)
    • July (29)
    • June (24)
    • May (52)
    • April (63)
    • March (35)
    • February (53)
    • January (50)
  • 2008
    • December (58)
    • November (65)
    • October (46)
    • September (48)
    • August (96)
    • July (87)
    • June (45)
    • May (51)
    • April (52)
    • March (70)
    • February (43)
    • January (49)
  • 2007
    • December (100)
    • November (52)
    • October (109)
    • September (68)
    • August (80)
    • July (56)
    • June (150)
    • May (115)
    • April (73)
    • March (124)
    • February (102)
    • January (68)
  • 2006
    • December (95)
    • November (53)
    • October (120)
    • September (57)
    • August (88)
    • July (54)
    • June (103)
    • May (89)
    • April (84)
    • March (143)
    • February (78)
    • January (64)
  • 2005
    • December (70)
    • November (97)
    • October (91)
    • September (61)
    • August (74)
    • July (92)
    • June (100)
    • May (53)
    • April (42)
    • March (41)
    • February (84)
    • January (31)
  • 2004
    • December (49)
    • November (26)
    • October (26)
    • September (6)
    • April (10)
Deep Dive into RavenDB webinars
  previous post next post  
Feb 04 2020

The results of upgrading RavenDB to .NET Core 3.1

time to read 1 min | 67 words

Last week we upgraded our internal production servers to run RavenDB under .NET Core 3.1. Here are the CPU metrics over the past two weeks.

image

It isn’t the only change in the deployed version, but none of the others were about performance Smile.

Tweet Share Share 16 comments
Tags:
  • performance
  • raven
  • ravendb.net

  previous post next post  

Comments

Adrian
04 Feb 2020
15:25 PM
Adrian

Is this an update from .Net 4.7 or from .Net Core 2.2/3.0 ?

Tyler Jensen
04 Feb 2020
15:51 PM
Tyler Jensen

I would very much like to read an analysis of what accounts for the change.

Piotr Perak
04 Feb 2020
16:08 PM
Piotr Perak

@Tyler I'm guessing lot less object instantiations and GC. Heavy use od Span and switching to System.Text.Json from Newtonsoft.Json.

Jason
04 Feb 2020
18:56 PM
Jason

@Adrian I believe is .Net Core upgrade, not from framework. Ever since release of RavenDB 4, it is away from the .net framework.

@Ayende did Json serializer changed to System.Text.Json now? I know in RavenDB 3.5 it uses forked version of Newtonsoft.Json. In RavenDB 4 I remember I didn't see forked version any more but not exactly sure if still use Newtonsoft.Json.

Database side switch to System.Text.Json probably not that big impact, client side switch it will be breaking change for some of user I think. When they have custom converter.

Bernhard Glück
04 Feb 2020
19:03 PM
Bernhard Glück

Jason correct me if i am wrong, but this seems to be ONLY the result of changing the runtime, not by changing to Span<T> or using System.Text.Json instead of Newtonsoft.Json ( Raven Uses their own Binary kind of JSON implemented in Sparrow ) Since RavenDB uses unsafe c# and pointers a lot already Span<T> does not give you much except maybe at some intersection points with some networking apis.

I am however really happy that they did not incur performance regressions due to the ..... extreme kinds of optimizations they did ( tailoring C# code to match JIT behaviour ) because that was likely to break as the JIT is constantly evolving ( I just had a nasty issue like that going from 3.0 to 3.1 in some low level audio processing code )

Lorenzo Melato
05 Feb 2020
08:26 AM
Lorenzo Melato

Did you plan to upgrade the .NET core runtime in RavenDb cloud also?

Oren Eini
05 Feb 2020
11:19 AM
Oren Eini

Lorenzo,

Yes, we'll probably do a roll out of that during Feb.

Oren Eini
05 Feb 2020
11:20 AM
Oren Eini

Adiran,

This is from .NET Core 2.2

Oren Eini
05 Feb 2020
11:20 AM
Oren Eini

Tyler, .NET Core 3.1, mostly, I think. We haven't done any perf work to account for this. 

Oren Eini
05 Feb 2020
11:21 AM
Oren Eini

Piotr,

Absolutely none of that, actually. We moved to .NET Core 3.1, fixed a bunch of relatively minor stuff but didn't do any of the things you are suggesting. These remain open as of now.

Oren Eini
05 Feb 2020
11:22 AM
Oren Eini

Jason,

On the server side, we have our own JSON parser which is really fast. We did some tests around that and it wasn't worth switching, our impl was significantly faster.

On the client side, we use Newtonsoft.Json by default, but also allow you to select your own serializer,you can use System.Text.Json is you want.

Oren Eini
05 Feb 2020
11:24 AM
Oren Eini

Bernhard ,

Actually, the other way around. A lot of our low level work was done while working with the JIT team. Some of our code was already in patterns that the 3.1 JIT knew better about, for example

Piotr Perak
05 Feb 2020
13:03 PM
Piotr Perak

@Ayende I meant this is what MS did in .NET Core 3.1.

Edward
07 Mar 2020
10:55 AM
Edward

You can also come to the conclusion that before .core 3.1 the .net stack under performed. Every iteration MS tries to get it better but it will never be native speed with manual memory disposing.

There is a reason that MS does not build their product with .net.

Oren Eini
11 Mar 2020
06:58 AM
Oren Eini

Edward,

It actually isn't that hard to get to native speed (or better) with .NET If you'll look at the TechEmpower benchmark, https://www.techempower.com/benchmarks/#section=data-r18&hw=ph&test=plaintext you can see that asp.net core is within 0.2% of the top result (written in Rust). That is a damn impressive result

Oren Eini
11 Mar 2020
06:58 AM
Oren Eini

Edward,

It actually isn't that hard to get to native speed (or better) with .NET If you'll look at the TechEmpower benchmark, https://www.techempower.com/benchmarks/#section=data-r18&hw=ph&test=plaintext you can see that asp.net core is within 0.2% of the top result (written in Rust). That is a damn impressive result

Comment preview

Comments have been closed on this topic.

Markdown formatting

ESC to close

Markdown turns plain text formatting into fancy HTML formatting.

Phrase Emphasis

*italic*   **bold**
_italic_   __bold__

Links

Inline:

An [example](http://url.com/ "Title")

Reference-style labels (titles are optional):

An [example][id]. Then, anywhere
else in the doc, define the link:
  [id]: http://example.com/  "Title"

Images

Inline (titles are optional):

![alt text](/path/img.jpg "Title")

Reference-style:

![alt text][id]
[id]: /url/to/img.jpg "Title"

Headers

Setext-style:

Header 1
========
Header 2
--------

atx-style (closing #'s are optional):

# Header 1 #
## Header 2 ##
###### Header 6

Lists

Ordered, without paragraphs:

1.  Foo
2.  Bar

Unordered, with paragraphs:

*   A list item.
    With multiple paragraphs.
*   Bar

You can nest them:

*   Abacus
    * answer
*   Bubbles
    1.  bunk
    2.  bupkis
        * BELITTLER
    3. burper
*   Cunning

Blockquotes

> Email-style angle brackets
> are used for blockquotes.
> > And, they can be nested.
> #### Headers in blockquotes
> 
> * You can quote a list.
> * Etc.

Horizontal Rules

Three or more dashes or asterisks:

---
* * *
- - - - 

Manual Line Breaks

End a line with two or more spaces:

Roses are red,   
Violets are blue.

Fenced Code Blocks

Code blocks delimited by 3 or more backticks or tildas:

```
This is a preformatted
code block
```

Header IDs

Set the id of headings with {#<id>} at end of heading line:

## My Heading {#myheading}

Tables

Fruit    |Color
---------|----------
Apples   |Red
Pears	 |Green
Bananas  |Yellow

Definition Lists

Term 1
: Definition 1
Term 2
: Definition 2

Footnotes

Body text with a footnote [^1]
[^1]: Footnote text here

Abbreviations

MDD <- will have title
*[MDD]: MarkdownDeep

 

FUTURE POSTS

  1. NOT Sharding RavenDB Vector Search - 8 hours from now
  2. Optimizing the cost of clearing a set - 3 days from now
  3. Scaling HNSW in RavenDB: Optimizing for inadequate hardware - 5 days from now

There are posts all the way to May 14, 2025

RECENT SERIES

  1. RavenDB News (2):
    02 May 2025 - May 2025
  2. Recording (15):
    30 Apr 2025 - Practical AI Integration with RavenDB
  3. Production Postmortem (52):
    07 Apr 2025 - The race condition in the interlock
  4. RavenDB (13):
    02 Apr 2025 - .NET Aspire integration
  5. RavenDB 7.1 (6):
    18 Mar 2025 - One IO Ring to rule them all
View all series

RECENT COMMENTS

  • ถูกใจ ร้านนี้สุดๆ! อุปกรณ์ จาก inkspa pantip ทำให้ ผลงาน สวย จ้าง เสื้อ ทีม ได้ งาน ลงตัว ราคา คุ้ม ชวน ใคร อยากได้ ดีไซน...
    By ink-spa พันทิป on The null check that didn't check for nulls
  • But in case you have nullability checks enabled (i.e. `<Nullable>enable</Nullable>`), then you'll have a compiler warning on ...
    By Samyon Ristov on The null check that didn't check for nulls
  • Grok wasn't *wrong*. It only said that `_items` can't be null for the condition to evaluate to `true`, but didn't say anythi...
    By Johannes Egger on The null check that didn't check for nulls
  • When I started enabling NRT, I remember I was initially confused when all variables (for reference types) declared with `var`...
    By riccardo on The null check that didn't check for nulls
  • That is surprising - I think of var as a shorthand that does not affect the final result of the compilation. I wouldn't expec...
    By Chris B on The null check that didn't check for nulls

Syndication

Main feed Feed Stats
Comments feed   Comments Feed Stats
}