Eine von scalar veröffentlichte Bibliothek ermöglicht die ACID-Kompatibilität von nicht ACID-verteilten Datenbanken / Speichern. Durch die Verwendung verteilter Datenbanken wie Cassandra werden lineare Skalierbarkeit und hohe Verfügbarkeit erreicht.
Das größte Merkmal ist, dass Sie ** starke und konsistente ACID-Transaktionsfunktion ** verwenden können.
Weitere Informationen finden Sie unter ScalarDB-Dokumente.
ScalarDB besteht hauptsächlich aus den folgenden drei Schichten.
Hierarchisches Diagramm von ScalarDB
Das Datenmodell von ScalarDB ist ein mehrdimensionales Kartenmodell, das auf dem KeyValue-Format basiert. Der Datensatz besteht aus Partitionsschlüssel, Clustering-Schlüssel und einem Wertesatz.
ScalarDB-Datenmodell-Bilddiagramm
Jeder Wert wird eindeutig durch einen Primärschlüssel zugeordnet, der aus einem Partitionsschlüssel, einem Clustering-Schlüssel und dem Namen des Werts besteht.
Cassandra ist eine Art NoSQL-Datenbank und verfügt über die folgenden Funktionen.
· Hohe Skalierbarkeit und Verfügbarkeit ohne einen einzigen Fehlerpunkt -SQL-ähnliche Abfragesprache, Suchunterstützung nach Sekundärindex · Flexibles Schema
Es gibt jedoch auch die folgenden Einschränkungen:
· Weder Transaktionen noch JOIN werden unterstützt · Externe Schlüssel werden nicht unterstützt und Schlüssel sind unveränderlich · Der Schlüssel muss eindeutig sein ・ Die Suche ist kompliziert
Das Datenmodell besteht aus den folgenden Elementen, die die Daten auf Kosten einer gewissen Datenkonsistenz verteilen.
Keyspace Namespace der obersten Ebene
Column Family(Table) Ein Spaltensammelcontainer, der einer RDBMS-Tabelle entspricht
Partition key Schlüssel zum Verteilen von Daten nach Knoten
Values Andere Spaltendaten als Partiton Key und Clustering Key
Von hier an werde ich diese ScalarDB lokal unter Ubuntu 16.04 ausführen, das unter Windows 10 installiert ist.
Die erforderlichen Komponenten sind: -Oracle JDK 8 (OpenJDK 8) oder höher ・ Cassandra 3.11.x (neueste stabile Version zum Zeitpunkt des Schreibens) ・ Golang Ver.1.10 oder höher ・ Gradle Ver.4.10 oder höher
Lassen Sie es uns sofort installieren.
Oracle JDK 8(OpenJDK 8) (Referenz: http://cassandra.apache.org/)
Im Ausgangszustand von Ubuntu scheint es eine Java8-Ausführungsumgebung, aber keine Entwicklungsumgebung zu geben
Paketliste aktualisieren
$ sudo apt update
Installation der Java8-Entwicklungsumgebung
$ sudo apt install openjdk-8-jdk
Casssandra 3.11.x
Fügen Sie das Apache-Repository für Cassandora hinzu (für Version 3.11.)
$ echo "deb http://www.apache.org/dist/cassandra/debian 311x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list
Fügen Sie den Apache Cassandra-Repository-Schlüssel hinzu
$ curl https://www.apache.org/dist/cassandra/KEYS | sudo apt-key add -
Aktualisieren Sie das Repository
$ sudo apt-get update
Installieren Sie Cassandra
$ sudo apt-get install cassandra
Starten Sie Cassandra
$ sudo service cassandra start
Bestätigung des Starts von Cassandra
$ cqlsh
Der Start dauert jedoch einige Zeit. Warten Sie daher eine Weile, bevor Sie ihn ausführen.
OK, wenn es wie folgt wird
GPG error: http://www.apache.org 311x InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY A278B781FE4B2BDA
Öffentlichen Schlüssel hinzufügen
$ sudo apt-key adv --keyserver pool.sks-keyservers.net --recv-key A278B781FE4B2BDA
Aktualisieren Sie das Repository erneut
$ sudo apt-get update
golang
Laden Sie das Golang-Archiv herunter
$ curl -L https://dl.google.com/go/go1.10.5.linux-amd64.tar.gz > go1.10.5.linux-amd64.tar.gz
Entpacken Sie das heruntergeladene Archiv
$ sudo tar -C /usr/local -xzf go1.10.5.linux-amd64.tar.gz
Stellen Sie den GO-Pfad ein
$ vi ~/.bashrc
Fügen Sie dem Hauptteil von .bashrc die folgende Zeile hinzu
export PATH=$PATH:/usr/local/go/bin
Reflektieren Sie die Pfadeinstellung
$ source ~/.bashrc
Gradle Sie müssen SDK Man installieren, um Gradle zu installieren, aber Sie müssen zip bzw. unzip installieren, um SDK Man zu installieren.
Installation von zip und unzip
$ sudo apt install zip unzip
Installieren Sie SDK Man
$ curl -s "https://get.sdkman.io" | bash
Klicken Sie hier für Details (https://sdkman.io/install)
SDK Man-Grundeinstellungen $ source "/ home / (Ihr Benutzername) /.sdkman/bin/sdkman-init.sh" `
Bestätigen Sie die Installation von SDK Man
$ sdk version
OK, wenn eine Anzeige wie sdkman 5.0.0 + 51
angezeigt wird
Installieren Sie Gradle
$ sdk install gradle 4.10.2
Klicken Sie hier für Details (https://gradle.org/install/)
Gradle-Versionsprüfung
$ gradle --version
OK, wenn eine Anzeige wie "Gradle 4.10.2" angezeigt wird
$ sudo mkdir /etc/scalar/
$ sudo vi /etc/scalar/database.properties
database.properties
# Comma separated contact points
scalar.database.contact_points=localhost
# Port number for all the contact points. Default port number for each database is used if empty.
# scalar.database.contact_port=
# Credential information to access the database
scalar.database.username=cassandra
scalar.database.password=cassandra
$ sudo mkdir -p /data/cassandra/data
$ sudo mkdir -p /data/cassandra/commitlog
$ sudo mkdir -p /data/cassandra/hints
$ sudo mkdir -p /data/cassandra/saved_caches
Ändern Sie den Besitzer des Ordners / data / cassandra
$ sudo chown -R cassandra:cassandra /data/cassandra
Erstellen Sie eine Sicherungskopie der Cassandra-Konfigurationsdatei und bearbeiten Sie sie anschließend
$ sudo cp /etc/cassandra/cassandra.yaml /etc/cassandra/cassandra.yaml.copy
$ sudo vi /etc/cassandra/cassandra.yaml
commitlog_Verzeichniseinstellungen ändern(Zeile 196)
Vorher ändern
# commit log. when running on magnetic HDD, this should be a
# separate spindle than the data directories.
# If not set, the default directory is $CASSANDRA_HOME/data/commitlog.
commitlog_directory: /var/lib/cassandra/commitlog
Nach der veränderung
# commit log. when running on magnetic HDD, this should be a
# separate spindle than the data directories.
# If not set, the default directory is $CASSANDRA_HOME/data/commitlog.
commitlog_directory: /data/cassandra/commitlog
data_file_Verzeichniseinstellungen ändern(Zeile 191)
Vorher ändern
# Directories where Cassandra should store data on disk. Cassandra
# will spread data evenly across them, subject to the granularity of
# the configured compaction strategy.
# If not set, the default directory is $CASSANDRA_HOME/data/data.
data_file_directories: /var/lib/cassandra/data
Nach der veränderung
# Directories where Cassandra should store data on disk. Cassandra
# will spread data evenly across them, subject to the granularity of
# the configured compaction strategy.
# If not set, the default directory is $CASSANDRA_HOME/data/data.
data_file_directories: /data/cassandra/data
hints_Verzeichniseinstellungen ändern(Zeile 71)
Vorher ändern
# Directory where Cassandra should store hints.
# If not set, the default directory is $CASSANDRA_HOME/data/hints.
hints_directory: /var/lib/cassandra/hints
Nach der veränderung
# Directory where Cassandra should store hints.
# If not set, the default directory is $CASSANDRA_HOME/data/hints.
hints_directory: /data/cassandra/hints
saved_caches_Verzeichniseinstellungen ändern(Zeile 368)
Vorher ändern
# saved caches
# If not set, the default directory is $CASSANDRA_HOME/data/saved_caches.
saved_caches_directory: /var/lib/cassandra/saved_caches
Nach der veränderung
# saved caches
# If not set, the default directory is $CASSANDRA_HOME/data/saved_caches.
saved_caches_directory: /data/cassandra/saved_caches
Schalten Sie den Einstellungskommentar aus(379,380,385,Zeile 386)
Vorher ändern
# commitlog_sync_batch_window_in_ms milliseconds between fsyncs.
# This window should be kept short because the writer threads will
# be unable to do extra work while waiting. (You may need to increase
# concurrent_writes for the same reason.)
#
# commitlog_sync: batch
# commitlog_sync_batch_window_in_ms: 2
#
# the other option is "periodic" where writes may be acked immediately
# and the CommitLog is simply synced every commitlog_sync_period_in_ms
# milliseconds.
commitlog_sync: periodic
commitlog_sync_period_in_ms: 10000
Nach der veränderung
# commitlog_sync_batch_window_in_ms milliseconds between fsyncs.
# This window should be kept short because the writer threads will
# be unable to do extra work while waiting. (You may need to increase
# concurrent_writes for the same reason.)
#
commitlog_sync: batch
commitlog_sync_batch_window_in_ms: 2
#
# the other option is "periodic" where writes may be acked immediately
# and the CommitLog is simply synced every commitlog_sync_period_in_ms
# milliseconds.
# commitlog_sync: periodic
# commitlog_sync_period_in_ms: 10000
$ sudo service cassandra restart
$ cqlsh
Erfolgreicher Start, wenn Sie sich bei Cassandra Console anmelden können
$ sudo service cassandra status
Erfolg, wenn "* Cassandra läuft" angezeigt wird
ScalarDB Schema Tool Dieses Tool generiert und lädt das Schema der Datenbank für ScalarDB. Es gibt zwei Typen: Generator und Loader. Der Generator erstellt eine Schemadefinitionsdatei und eine Metadatendefinition, die für die Speicherimplementierung spezifisch sind (z. B. Casssandra), und der Loader verwendet den Generator, um die Schemadatei abzurufen und die Schemadefinition im Speicher zu erstellen. tun können.
Dadurch entfällt die Notwendigkeit, speicherspezifische Schemata bei der Modellierung von Anwendungsdaten zu berücksichtigen.
Klonen Sie das Github-Repository von ScalarDB
$ cd ~/
$ git clone https://github.com/scalar-labs/scalardb.git
Legen Sie den Pfad mithilfe von Variablen fest
$ SCALARDB_HOME = / home / (Benutzername der eigenen Umgebung) / scalarb
$ cd $SCALARDB_HOME`
Führen Sie build aus
$ sudo ./gradlew installDist
OK, wenn BUILD SUCCESSFUL angezeigt wird
Wechseln Sie in das Verzeichnis Schema Tools und führen Sie make aus
$ cd tools/schema
$ sudo make
$ sudo vi emoney-storage.sdbql
emoney-storage.sdbql
REPLICATION FACTOR 1;
CREATE NAMESPACE emoney;
CREATE TABLE emoney.account (
id TEXT PARTITIONKEY,
balance INT,
);
Starten Sie den Generator.
$ sudo ./generator emoney-storage.sdbql emoney-storage.cql
Stellen Sie sicher, dass emoney-storage.cql erstellt wurde.
Dies ist das Ende des Abschnitts zum Umgebungsbau. Im Abschnitt zum Erstellen von Beispielanwendungen möchte ich tatsächlich eine Beispielanwendung erstellen und den Betrieb der ScalarDB-Anwendung überprüfen.
Versuchen Sie, ScalarDB unter WSL Ubuntu auszuführen (Beispielanwendung erstellen)
Recommended Posts