- TileDB
- Materialisieren
- Prisma
Im zweiten Artikel werden wir Ihnen drei weitere erzählen:
- EdgeDB
- Tremor
- Debezium
Und der dritte Artikel wird den Schlussfolgerungen gewidmet sein.
Hinweis: Dies konzentriert sich ausschließlich auf die zugrunde liegende Technologie, und Funktionen wie Unternehmensfunktionen werden (gegebenenfalls) weitgehend ignoriert.
TileD B.
TileDB ist eine Datenbank, die auf mehrdimensionalen Arrays basiert . Sie können die Arbeit mit Datentypen vereinfachen, die nicht vollständig in vorhandene relationale Datenbankverwaltungssysteme (RDBMS) passen, z. B. dichte und spärliche Arrays , Datenrahmen . TileDB ist speziell auf Anwendungsfälle wie Genomik und Geodaten zugeschnitten .
Bemerkenswerte Eigenschaften
- Umschaltbare Daten-Backends mit Unterstützung für Amazon S3 , MinIO und mehr.
- Speicherintegrationen für HDFS , PrestoDB , Apache Spark , Dask und mehr.
- Sprachbindungen für C / C ++ , Python , R , Java und Go .
Was mir besonders gut gefallen hat
Wir mögen solche "hochspezialisierten" Datenbanken, die für einen bestimmten Satz von Datentypen und Aufgaben geschärft wurden. Herkömmliche RDBMS sind natürlich gut in ihrer relativen Vielseitigkeit, um ein extrem breites Spektrum von Anwendungsfällen abzudecken (kein Scherz). Aber manchmal gibt es extreme Fälle, in denen in der allerletzten Phase (a) die Fähigkeiten "herkömmlicher" Systeme nicht ausreichen und (b) die Aufgabe für Ihr Unternehmen sehr wichtig ist.
Wir erwarten, dass andere ähnliche Systeme entstehen, wenn die Spezialisierung von Datenbankanwendungsfällen und neue Themenbereiche entstehen. Das gute alte RDBMS wird natürlich nirgendwo hingehen, aber ich würde gerne sehen, wie sich TileDB und andere ähnliche Systeme entwickeln und die Grenzen des Möglichen erweitern. Wir hoffen, dass es sehr "hackbare", nicht monolithische Datenbanken geben wird, die eine Schnittstelle zum Verbinden von Plugins haben, damit Sie mit Datentypen arbeiten können, die für bestimmte Anwendungsfälle sehr spezifisch sind. Aber dazu später mehr.
Fragen an das Projekt
- ? TileDB , , , ? .
- - ? , «TileDB -». ?
Materialize
Materialise wird als "die erste echte Streaming-SQL-Datenbank" vermarktet, und vielleicht ist dies wirklich keine Übertreibung! Grundsätzlich handelt es sich um eine relationale Datenbank, die mit PostgreSQL " drahtkompatibel" ist , jedoch mit einem wichtigen Unterschied: Sie bietet aktualisierte materialisierte Ansichten in Echtzeit.
Es gibt Materialises Definition von " Streaming-Speicher ", die dafür zu funktionieren scheint .
In Standard-Postgres müssen Sie beispielsweise materialisierte Ansichten manuell aktualisieren:
CREATE MATERIALIZED VIEW my_view (/* ... */);
REFRESH MATERIALIZED VIEW my_view;
/* The underlying tables change */
REFRESH MATERIALIZED VIEW my_view;
/* More stuff happens */
REFRESH MATERIALIZED VIEW my_view;
Dies kann in beliebiger Häufigkeit erfolgen, beispielsweise mithilfe eines Skripts oder einer Scheduler-Aufgabe. Was wir noch nicht gesehen haben (obwohl wir es immer wirklich sehen wollten), ist eine Datenbank, die nativ inkrementelle Aktualisierungen materialisierter Ansichten unterstützt. Ja, in der Tat: Materialisieren Sie Monitore auf Änderungen in den angegebenen Datenquellen und aktualisieren Sie Ansichten basierend auf Änderungen in diesen Quellen.
Selbst wenn Materialise nicht lange genug gewinnt oder auf dem Markt bleibt, sollten die angebotenen Funktionen fortgesetzt werden und werden mit ziemlicher Sicherheit in anderen Datenbanken repliziert.
Bemerkenswerte Eigenschaften
- , ( Postgres), JSON, CSV , Kafka Kinesis, .
- : «» (timely dataflow) «» (differential dataflow). , . Materialize, , , Materialize — « », , .
- Materialize «» Postgres, psql Postgres.
Materialisieren kann möglicherweise viel ersetzen. Das Offensichtlichste: Mit dem System können Sie das gesamte verfügbare Arsenal an Prozessen verwenden, um Ihre materialisierten Ansichten schrittweise zu aktualisieren. Aber das ist kein großer Gewinn.
Viel wichtiger für uns ist, dass Materialise es uns ermöglicht, die Teile des Datenstapels inaktiv zu machen, die für die Verfolgung von Änderungen in Datenquellen zugewiesen sind. Dies kann nativ erfolgen :
CREATE SOURCE click_events
FROM KAFKA BROKER 'localhost:9092' TOPIC 'click_events'
FORMAT AVRO USING CONFLUENT SCHEMA REGISTRY 'http://localhost:8081';
Ihre Datenbank "kennt" jetzt die Datenquelle, mit der automatisch aktualisierte materialisierte Ansichten erstellt werden können. Dieses native "Pipelining" erscheint mir noch magischer als die automatische Aktualisierung von Ansichten. Wenn Sie beispielsweise serverlose Funktionen oder Heron- Jobs oder Flink- Datenpipelines ausführen, die nur nachverfolgen, und dort einen Operator hinzufügen
INSERT
, können Sie mit Materialise diesen Teil des Stapels einfach entfernen.
Fragen an das Projekt
- Warum eine separate Datenbank und keine Postgres- Erweiterung ? Wir sind sicher, dass es gute architektonische Gründe gibt, warum die Erweiterung hier nicht so funktioniert, aber ich würde gerne wissen, warum.
- Wie einfach ist es, Erweiterungen für andere Datenquellen zu erstellen? Wie kann man zum Beispiel eine Erweiterung für Apache Pulsar schreiben ? Gibt es Pläne, APIs für Entwickler zu diesem Zweck zu öffnen?
Prisma
Prisma ist weniger eine Datenbank als eine Reihe von Tools, mit denen Sie Ihre Datenbank so weit wie möglich abstrahieren können . Das System ist derzeit auf der Datenbankseite mit PostgreSQL , MySQL und SQLite sowie sprachlich mit JavaScript und TypeScript kompatibel (mit der Aussicht, in Zukunft andere Datenbanken und Sprachen zu unterstützen). Es wird als "Datenschicht für moderne Anwendungen" in Rechnung gestellt, was im Allgemeinen zutrifft.
Die "goldene Art", Prisma zu verwenden, ist ungefähr so:
- Definieren Sie Ihre Datentypen auf Anwendungsebene mithilfe des SDL-Schemas von Prisma.
- Generieren Sie basierend auf dem erstellten Schema einen sehr idiomatischen Code für die Sprache Ihrer Wahl.
- Erstellen Sie REST-APIs, GraphQL-APIs und alles, was Sie sonst noch erstellen möchten.
Wir verstehen die Zweifel einiger Leute an Werkzeugen wie Prisma. Es gibt eine große Gruppe von Entwicklern, die sich der Datenbankabstraktion widersetzen. Sie benötigen keine intelligenten DSLs und GUIs. Sie möchten einfaches SQL schreiben und den gesamten Datenbank-Interaktionscode von Hand erstellen. Wir verstehen den Wunsch, dieses Maß an Kontrolle aufrechtzuerhalten, empfehlen jedoch, dass Sie 20 bis 30 Minuten lang Prisma ausprobieren. Wir denken, dass es ziemlich gut ist, den Sweet Spot zwischen Brute Force und Raw SQL zu finden.
Bemerkenswerte Eigenschaften
- Prisma SDL , . .
- Prisma Migrate ( , SQL). , A , .
- Prisma Studio — , Prisma.
Mit dem Prisma-Schema DSL können Sie nicht nur die für Ihre Anwendung erforderlichen Datentypen angeben, sondern auch bestimmen, welchen Codegenerator Sie verwenden möchten, sowie die Verbindungsinformationen für die Datenbank, mit der Sie eine Verbindung herstellen.
Zusätzlich aufgezählten Typen (enums) vorgesehen sind, bequem Anmerkungen wie
@id
, @relation
und @default
. Erinnert an die DSL für die Migration von Datenbanken von Active und Ecto sowie IDLs ähnlich denen in verwendet Protocol Buffers und Thrift .
Ich würde gerne eine Anpassung der SDL-Schemata von Prisma oder ähnliches als sprachunabhängigen Standard sehen (geeignet für sprachspezifische Bibliotheken). Der Status Quo geht davon aus, dass jede Programmiersprache das Rad neu erfindet. Wir halten es für nützlich, die Typen, die die Interaktion zwischen der Anwendung und der Datenbank definieren, sprachunabhängig zu definieren.
Besonderer Dank geht übrigens an Prisma für die hervorragende Dokumentation. Wir halten dies definitiv für einen wichtigen Unterschied. Wenn Ihre Dokumentation nicht in den Abschnitt „Was mir am besten gefallen hat“ eines Blogposts fällt, sollten Sie mehr Ressourcen in die Erstellung von Whitepapers investieren.
Fragen an das Projekt
Wird Prisma auch in Sprachen nützlich sein, in denen bereits weit verbreitete objektrelationale Zuordnungen (ORMs) verwendet werden? Bei der Verwendung von Active für Ruby oder Ecto für Elixir, was ist der Anreiz Schalter?