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
Version
Datum
Funktioner som lagts till (delvis lista)
Kompatibel?
1,0
Maj 2010
Nej
2,0
Januari 2013
Replikering
Nej
2,5
Juni 2013
Prognoser; facet frågor
Nej
3,0
November 2014
Java API; Voron lagringsmotor
Nej
3,5
Oktober 2016
Klustring
Ja
4,0
Februari 2018
Blev plattformsoberoende; tillgänglig med en fri licens
Nej
4,1
Augusti 2018
Klusterövergripande transaktioner
Nej
4,2
Maj 2019
Support för Graf-baserade frågor
Ja
5,0
Juli 2020
Tidsserier; Datakomprimering med hjälp av Zstd-algoritmen
Ja
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.
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.
123Kaur, Harpreet, and Kamal Jeet Kaur. "A Review: Study of Document oriented databases and their Security." International Journal of Advanced Research in Computer Science 4.8 (2013).
↑Stevic, Milorad P. "Managing documents with NoSQL in service oriented architecture." Online Journal of Applied Knowledge Management (OJAKM) 1.2 (2013): 105-115.