SurrealDB: Version 1.0 Gerade Veröffentlicht! Die nächste Generation der SQL-Datenbank?
Stellen Sie sich die Zukunft des Datenbankmanagements vor: Version 1.0 wurde gerade veröffentlicht! 🚀 Ist dies die SQL-Datenbank der nächsten Generation, auf die Sie gewartet haben? 🌟
Erklärung von SurrealDB im historischen Kontext
Lassen Sie uns zunächst erläutern, warum SurrealDB im Vergleich zu weit verbreiteten Datenbanken herausragt.
Von physischem Papier zu digitalem Papier
-
Relational (Tabelle): SQL
-
Dokument: NoSQL
-
Graph
Relationale Datenbanken 📊
SQL ist wie ein Puzzle. Sie planen, erstellen und setzen Teile zusammen, um Ihre Antwort zu erhalten, wobei oft mehrere Teile für jede Lösung erforderlich sind.
price_list
id | price |
---|---|
1 | 1.7 |
2 | 1.5 |
3 | 22.99 |
fruit_box
id | fruit | quantity |
---|---|---|
1 | Apple | 5 |
2 | Orange | 3 |
3 | Durian | 1000 |
select * from fruit_box select fruit from fruit_box select fruit, price from fruit_box fb inner join price_list pl on [fb.id](http://fb.id)=[pl.id](http://pl.id)
-
Die erste Abfrage ruft alle Daten aus der fruit_box Tabelle ab.
-
Die zweite Abfrage ruft nur die Spalte "fruit" aus der fruit_box Tabelle ab.
-
Die dritte Abfrage kombiniert Daten aus den Tabellen fruitbox und price_list und zeigt die Fruchtnamen sowie die zugehörigen Preise an, wenn in beiden Tabellen eine übereinstimmende ID vorhanden ist.
SQL ist wie ein Puzzle. Sie planen, erstellen und setzen Teile zusammen, um Ihre Antwort zu erhalten, wobei oft mehrere Teile für jede Lösung erforderlich sind.
Dokument 📄
Ich bevorzuge einen einfachen Ansatz. Anstatt jedes Mal ein Puzzle zu lösen, erstelle ich lieber ein umfassendes Dokument mit allen benötigten Informationen. Dann kann ich einfach dieses Dokument lesen, um die Antworten zu finden, die ich suche.
db={ "fruit_box": [ { "_id": 1, "fruit": "Apple", "quantity": 5 }, { "_id": 2, "fruit": "Orange", "quantity": 3 }, { "_id": 3, "fruit": "Durian", "quantity": 1000 }, ] }
"price_list": [ { "_id": 1, "price": 1.7, }, { "_id": 2, "price": 1.5, }, { "_id": 3, "price": 22.99, }, ]
db.fruit_box.find() db.fruitbox.find({}, {fruit: 1, id: 0}) db.fruit_box.aggregate([{ "$lookup": { "from": "price_list", "localField": "_id", "foreignField": "_id", "as": "Result" } }])
Graph 🕸️
Ähnlich wie bei einem sozialen Netzwerk erstellen Sie eine Karte, wer was weiß und wie sie verbunden sind. Dann durchsuchen Sie das Netzwerk und fragen, bis Sie finden, was Sie benötigen.
(1:fruit_box {fruit:"Apple",quantity:5}) (2:fruit_box {fruit:"Orange",quantity:3}) (3:fruit_box {fruit:"Durian",quantity:1000}) (1:price_list {price:1.7}) (2:price_list {price:1.5}) (3:price_list {price:22.99})
match (f:fruit_box) return f match (f:fruit_box) return f.fruit match (f:fruitbox)-[:lookup]->(p:pricelist) return f.fruit, p.price
NewSQL - SurrealQL
select fruit, ->lookup->price_list.price as price from fruit_box
SurrealQL vereinfacht die Komplexität, insbesondere in Bezug auf Tabellenbeziehungen. Wenn Sie Daten in eine nicht vorhandene Tabelle einfügen, generiert SurrealDB die Tabelle automatisch.
Tolle Funktionen und geringe Größe
SurrealDB bietet eine Fülle von Funktionen, und sein Docker-Image der Version 1.0.0 ist außergewöhnlich kompakt, mit nur 17,5 MB, dank seiner auf Rust basierenden Architektur. Im Vergleich dazu überschreitet die Größe des Docker-Images von PostgreSQL 80 MB.
Wenn Sie SurrealDB in einem Webbrowser verwenden, bietet die WebAssembly-Bibliothek Unterstützung für die Verbindung zu einer entfernten Datenbank über HTTP oder WebSockets. Sie ermöglicht auch die Datenspeicherung mit IndexedDB im Browser. Sie haben die Flexibilität, zwischen einem schemavollen oder schemalosen Ansatz zu wählen. Sie können unstrukturierte verschachtelte Daten mit beliebigen Spalten speichern oder die Datenspeicherung gezielt auf bestimmte Spalten oder Felder beschränken. Dies bedeutet, dass Sie schnell beginnen können, ohne jede Spalte definieren zu müssen, und zu einem schemavollen Ansatz wechseln können, sobald Ihr Datenmodell etabliert ist.
Übrigens, habe ich schon erwähnt, dass in SurrealQL Kommentare auf verschiedene Arten geschrieben werden können?
/* In SurrealQL, comments can be written as single-line or multi-line comments, and comments can be used and interspersed within statements. */ SELECT FROM / get all users */ user; There are a number of ways to use single-line comments SELECT * FROM user; // Alternatively using two forward-slash characters SELECT * FROM user; -- Another way is to use two dash characters SELECT * FROM user;