RavenDB

RavenDB är en med öppen källkod fullt ACID dokumentorienterad databas skriven i C# och utvecklad av Hibernating Rhinos Ltd. Den är plattformsoberoende, och har stöd för Windows, Linux och MacOS. RavenDB lagrar data som JSON-dokument, och kan distribueras i distribuerade kluster med master-master-replikering.

Historia 
RavenDB hette ursprungligen "Rhino DivanDB", och började som ett projekt av Oren Eini (alias Ayende Rahien) 2008 och är utvecklat av Hibernating Rhinos Ltd. Företaget hävdar att det var den första dokumentdatabasen som kunde köras inbyggt i .NET-ramverket. Den var också tidigt för ute med att erbjuda ACID-garantier.

2019 började Hibernating Rhinos erbjuda RavenDB som en molntjänst som heter RavenDB Cloud.

Versionshistorik

Systemarkitektur 
Data lagras i databasen som schemalösa dokument i JSON-format. På lagringsnivån sparas dokumenten i ett binärt format som kallas "blittable". Dokument grupperas i samlingar och varje dokument tillhör alltid en samling.

Databaser kan distribueras på ett distribuerat kluster av servrar (som kallas 'noder') med hjälp av multi-master replikering. Vissa operationer på klusternivå kräver konsensus av en majoritet av noder; konsensus bestäms med hjälp av en implementering av Raft algoritmen kallad Rachis. Uppgifter fördelas till de olika noderna på ett balanserat sätt.

RavenDB använde ursprungligen Esent-lagringsmotorn. Version 3.0 ersatte denna med en ny öppen-källkod baserad lagringsmotor som kallas Voron.

Klienter finns för C#, C++, Java, Node.js, Python, Ruby och Go.

Huvudfunktioner 
 Klusterövergripande: ACID-transaktioner - ACID-transaktioner kan utföras både mot klustret eller enstaka noder. Transaktioner kommer bara att genomföras om den bekräftas genom en konsensus av noder, annars avbryts transaktionen och rullas tillbaka.

Indexering och frågor 
Frågor uttrycks i LINQ eller med ett anpassat frågespråk som kallas RQL (står för Raven Query Language) som har syntax som liknar SQL.

 Dynamiska index - RavenDB-frågor kan endast uppfyllas med ett index; om inget lämpligt index finns skapas ett nytt index automatiskt för att tillfredsställa frågan.
 Graf frågor - relaterade dokument kan behandlas som hörn i en graf, med anslutningarna som behandlas som kanter. Detta gör det möjligt att skapa rekursiva frågor.
 Projektioner - index kan konfigureras för att omvandla indexerade data, utföra beräkningar, utföra aggregeringar och köra javascript-kod på serversidan.
 Fulltextsökning - på en låg nivå indexeras data med Lucene.net, vilket innebär att index stöder fulltextsökning.

Dokumenttillägg 
Dokument kan utökas med andra datatyper mindre lämpade för JSON. Dessa tillägg kan läsas in, ändras och lagras oberoende av själva dokumentet.

 Bifogade filer - dokument kan ha flera bilagor av valfri datatyp, till exempel bilder, ljud eller rent binära filer.
 Tidsserier - numeriska data som är associerade med specifika tider och ordnade kronologiskt.

RavenDB-moln 
RavenDB Cloud är en databas-som-en-tjänst som lanserades 2019 på AWS, Azure och GCP. Tjänsten utför administrationsuppgifter som maskinvaruunderhåll och säkerhet för användare. Den har delning av CPU-resurser mellan de olika noderna i ett kluster för att undvika begränsningar.

Licens 
RavenDB är öppen källkod under en AGPLv3-licens. Den finns med en fri licens och en kommersiell licens.

Referenser

Externa länkar 
 Officiell webbplats
 GitHub
 RavenDB-moln
 Ayende blogg

Databaser