RavenDB

RavenDB הוא בסיס נתונים מבוזר המושתת על מודל המסמכים (Document Model) ותומך במאפייני ACID במלואם. RavenDB מפותח על ידי Hibernating Rhinos Ltd.<ref name=":1"></ref><ref name=":7"></ref><ref name=":17"></ref><ref name=":22"></ref><ref name=":24"></ref><ref name=":39">Kaur, 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).</ref> היא תוכנת קוד-פתוח הכתובה בשפת C# ונתמכת על ידי מערכות הפעלה מרובות, לרבות Windows, Linux ו-MacOS<ref name=":1"/>. ניתן לפרושֹ שרתי RavenDB באשכולות מבוזרים (Distributed Clusters), בשכפול מולטי-מאסטר (Multi-Master Replication).

== היסטוריה ==
פיתוח בסיס הנתונים "RavenDB", (או "Rhino DivanDB" בשמו המקורי)<ref name=":1"/><ref name=":2"/>, החל בשנת 2008 על ידי אורן עיני (Ayende Rahien<ref name=":18"/>) ונמשך על ידי חברת Hibernating Rhinos Ltd.<ref name=":22"/>.

לדברי החברה היה RavenDB בסיס הנתונים מושתת מודל-המסמכים הראשון שפעל על-גבי NET framework<ref name=":1"/><ref name=":7"/> . הוא גם מראשוני בסיסי הנתונים מסוגו שסיפקו תמיכה מלאה בכל מאפייני ACID<ref name=":17"/><ref name=":21"/>.

בשנת 2019 החלה חברת Hibernating Rhinos לספק את RavenDB גם כשירות ענן בשם RavenDB Cloud.<ref name=":27"></ref><ref name=":28"></ref><ref name=":29"></ref>

== גרסאות ==
{| class="wikitable"
! גרסה !! תאריך !! תכונות שנוספו (רשימה חלקית)
|-
| 1.0|| מאי 2010<ref name=":9"></ref>
|-
| 2.0|| ינואר 2013<ref name=":10"></ref>|| שכפול Replication<ref name=":31"/><ref name=":32"/>
|-
| 2.5|| יוני 2013<ref name=":11"></ref>|| הטלות, שאילתות פאות Projections; facet querying<ref name=":31"/>
|-
| 3.0|| נובמבר 2014<ref name=":12"></ref>|| מנוע אחסון חדש "Voron"; ממשק תכנות יישומים ב-Java API; Voron storage engine<ref name=":5"/><ref name=":6"/>
|-
| Sim3|3.5|| אוקטובר 2016<ref name=":13"></ref>|| אשכולות מבוזרים Clustering<ref name=":13"/>
|-
| 4.0|| פברואר 2018<ref name=":14"></ref>|| נהיה חוצה-פלטפורמות; זמין עם רישיון חופשי<ref name=":26"></ref>
|-
| 4.1|| אוגוסט 2018<ref name=":15"></ref>|| תנועות מבוזרות Cluster-wide transactions<ref name=":27"/><ref name=":15"/>
|-
| 4.2|| 2019<ref name=":16"></ref>|| שאילתות גרף Graph querying<ref name=":27"/>
|-
| 5.0|| || סדרות זמן (time-series)
|}

== ארכיטקטורת המערכת ==
הנתונים נשמרים על ידי RavenDB במסמכים חסרי-סכימה (Schemaless) בפורמט JSON.<ref name=":1"/><ref name=":2"></ref><ref name=":7"/><ref name=":31"></ref><ref name=":32"></ref><ref name=":39"/> ברמת האחסון, המסמכים נכתבים בפורמט בינארי בשם "Blittable",<ref name=":33"></ref>. המסמכים מקובצים באוספים (Collections) - כל מסמך שייך לאוסף אחד בלבד.<ref name=":31"/><ref name=":32"/>
ניתן לפרושֹ מערכות RavenDB באשכול מבוזר של שרתים (הקרויים "צמתים", "nodes"),
באמצעות שכפול מולטי-מאסטר (multi-master replication<ref name=":1"/><ref name=":17"/>).
לשם ביצוע פעולות מסוימות ברמת האשכול, נדרשת הסכמת רוב הצמתים; כדי להשיג את ההסכמה, משתמשים הצמתים באלגוריתם Raft (Raft Consensus Algorithm).<ref name=":1"/>
משימות בסיס הנתונים מחולקות בין הצמתים באופן מאוזן, כדי להקל על העומס המוטל על כל אחד מהם.<ref name=":1"/>
בתחילת דרכו השתמש RavenDB במנוע האחסון ESENT.<ref name=":2"/><ref name=":18"></ref><ref name=":32"/>
בגרסה 3.0 כלל בסיס הנתונים לראשונה את מנוע האחסון הבלעדי Voron.<ref name=":5"></ref><ref name=":6"></ref>
יישומי-לקוח (client applications) נתמכים בשפות C#, C++, Java, NodeJS, Python, Ruby ו-Go.<ref name=":17"/>

== היסטוריה ==
* תמיכה ב-ACID ברמת האשכול Cluster-wide ACID transactions)
RavenDB מבטיח מאפייני ACID מלאים גם בפעולות ברמת השרת היחיד, וגם ברמת האשכול. בהתאם למאפייני ACID: כל תנועה תבוצע במלואה, או שלא תבוצע כלל.<ref name=":1"/><ref name=":27"/>
* מונים מבוזרים (Distributed Counters)
ניתן לצרף למסמכים ערכים מטיפוס שלם שניתנים לעדכון על ידי יישומי-לקוח רבים ללא גרימת קונפליקטים.<ref name=":35"></ref><ref name=":36"></ref>
* סדרות-זמן מבוזרות (Distributed Time-Series)
ניתן לצרף למסמכים "סדרות-זמן" לניהול נתונים בעלי חותם זמן.
* אינדקסים אוטומטיים וידניים (Automatic and Static Indexing)
RavenDB תמיד עונה לשאילתות באמצעות אינדקס. אם לא נמצא אינדקס מתאים, בסיס הנתונים מיצר אינדקס חדש באופן אוטומטי לטיפול בשאילתות מסוג זה.
משימת יצירת אינדקסים ועדכון אינדקסים קיימים מתבצעת ברקע.
ניתן ליצור ולערוך אינדקסים גם ידנית.
* שאילתות (Queries)
יישומי לקוח יכולים לשלוח לשרתים שאילתות באמצעות ביטויי LINQ או באמצעות שפת השאילתות הבלעדית RQL (Raven Query Language) - בעלת תחביר המבוסס על SQL.
<ref name=":1"/><ref name=":7"/><ref name=":17"/>
* שאילתות גרף (Graph Querying)
ניתן לנסח שאילתות שמתייחסות אל מסמכים המכילים הפניות למסמכים אחרים כאל קודקודים של גרף. זה מאפשר בין השאר ניסוח של שאילתות רקורסיביות.<ref name=":35"/><ref name=":36"/><ref name=":37"></ref>
* הטלה (Projection) – אינדקסים ושאילתות מסוגלים לבצע עיבוד נתונים הכולל חישובים או סקריפטים.<ref name=":1"/><ref name=":17"/><ref name=":38"></ref>
* חיפוש טקסט-מלא (Full-text search) – ברמה הנמוכה, הנתונים מתאנדקסים (indexed) עם Lucene.net; פירוש הדבר שהאינדקסים תומכים חיפוש טקסט-מלא.<ref name=":1"/><ref name=":21"></ref><ref name=":31"/><ref name=":32"/><ref name=":40">Stevic, Milorad P. "Managing documents with NoSQL in service oriented architecture." Online Journal of Applied Knowledge Management (OJAKM) 1.2 (2013): 105-115.</ref><ref name=":41"></ref>

== ענן RavenDB ==
ענן RavenDB הוא שירות-בסיס-נתונים שהופעל בשנת 2019 במערכות AWS, Microsoft Azure ו-GCP. השירות מבצע משימות ניהול כגון תחזוקת חומרה ובטיחות המשתמשים. הוא מציג את שיתוף משאבי ה-CPU בין צמתים שונים באשכול כדי למנוע חניקה (throttling).<ref name=":27"/><ref name=":28"/><ref name=":29"/>

== רישיון ==
RavenDB היא מערכת קוד-פתוח תחת רישיון AGPLv3 1. היא זמינה עם רישיון חופשי ורישיון מסחרי.<ref name=":1"/>

==קישורים חיצוניים==

* 
* 
* [https://github.com/ravendb/ravendb GitHub]
* [https://ayende.com/blog/ Ayende Blog]

==הערות שוליים==

קטגוריה:NoSQL
קטגוריה:תוכנה חופשית
קטגוריה:תוכנות שהושקו ב-2010