Apache Cassandra ist eine hoch skalierbare Datenbank mit abstimmbarer Konsistenz. Es handelt sich um eine NoSQL-Datenbank, die von großen Organisationen in verschiedenen Anwendungsbereichen eingesetzt wird. Der Einstieg in Apache Cassandra in Python kann sich für jeden Entwickler oder Datenwissenschaftler als intensive und zeitaufwändige Aufgabe erweisen. Cassandra hat eine steile Lernkurve und wird mit einer Vielzahl von Tools und Konfigurationen geliefert. In diesem Blog erfahren Sie, was Apache Cassandra ist, wie es sich von relationalen Datenbanken unterscheidet und wie es besser ist. Wir gehen auf ein einfaches, mit Python erstelltes Beispiel für die Einrichtung von Apache Cassandra und eine Beispielanwendung ein, damit Sie selbst damit herumspielen können.

Wir führen Sie durch die Einrichtung von Python und DataStax Astra – einer Cassandra-as-a-Service-Anwendung, die kostenlos in einer beliebigen Cloud gehostet wird. Wir zeigen Ihnen, wie Sie Python mit Cassandra verbinden und Daten mit dem ODBC-Treiber von DataStax einfügen, und wir verwenden die Astra-Webkonsole, um in Cassandra gespeicherte Daten mit der CQL-Konsole abzufragen.

Was ist Apache Cassandra?

Cassandra ist eine beliebte Datenbanktechnologie. Cassandra wurde ursprünglich von Facebook entwickelt, als das Unternehmen beschloss, sein Geschäft so zu skalieren, dass es die Grenzen von MySQL, einer damals beliebten Datenbanktechnologie, überschritt. Cassandra ist hochgradig skalierbar und kann problemlos mehrere Vorgänge verarbeiten. Cassandra wurde in Java entwickelt und verfügt über mehr als 200 Operatoren. Cassandra ist eine verteilte Datenbanktechnologie, was bedeutet, dass die Informationen über mehrere Knoten verteilt sind. Cassandra verwendet kein SQL, sondern verfügt über ein flexibles Datenmodell und eine breite Palette von Operatoren, die eine komplexe Datenmanipulation ermöglichen. Cassandra wird auf vielen Plattformen unterstützt. Cassandra ist die NoSQL-Alternative zu teuren und schwer zu skalierenden Datenbanken wie Oracle, MongoDB und Amazon DynamoDB.

Voraussetzungen

Bevor wir loslegen, sollten Sie sich zunächst für ein DataStax Astra-Konto anmelden, was Sie tun können, indem Sie auf deren Website gehen und das Formular ausfüllen. Danach müssen Sie einige Module installieren, damit wir die Beispielanwendung erstellen können. Wir werden uns darauf konzentrieren, nur die notwendigen Softwareanforderungen zu installieren, damit unsere Python-Anwendung läuft.

Wie bereits erwähnt, werden wir DataStax Astra verwenden, eine verwaltete Cassandra-as-a-Service-Anwendung, sowie einige andere Module. Wir können sie alle auf einmal installieren, indem wir eine requirements.txt-Datei erstellen. Fügen Sie einfach die folgende Zeile in diese Datei ein und installieren Sie sie mit diesem Befehl: pip install -r requirements.txt.

cassandra-driver==3.25.0
numpy==1.19.3
astrapy==0.0.2
simplejson==3.17.2

Einrichten einer Cassandra-Datenbank

Cassandra ist eine freie und quelloffene Software, was bedeutet, dass sie kostenlos genutzt werden kann – Sie müssen nicht dafür bezahlen, Cassandra in Ihrer Infrastruktur einzusetzen. Wenn Sie sich mit Servern und Datenbanken auskennen und Ihre Installationen und Konfigurationen selbst vornehmen möchten, finden Sie in der Dokumentation ausführliche Anleitungen; allerdings kann dieser ganze Prozess vor allem für Erstnutzer einschüchternd sein. Alternativ können Sie Cassandra auch in der Cloud bereitstellen, und genau das werden wir hier tun.

Der beste Weg für Anfänger, mit Cassandra zu arbeiten, ist eine verwaltete Cassandra-Datenbank, die im Internet verfügbar ist. Datastax Astra ist eine Datenbank-as-a-Service, die Sie mit einem Mausklick starten können. Die Cloud-Lösungen von Datastax basieren auf Apache Cassandra und bieten großzügige kostenlose Kontingente von bis zu 20 Millionen Schreibvorgängen/Monat und 80 GB Datenspeicher. Sie können sie so weit wie möglich nutzen, indem Sie die Dienste kostenlos ausprobieren oder mit der Verwaltung Ihrer Anwendung beginnen.

Zunächst müssen wir unsere Astra-DB-IDs abrufen und ein Anwendungstoken generieren. Navigieren Sie dazu zur Datastax Astra-Homepage, klicken Sie auf die Schaltfläche „Datenbank erstellen“ in der Seitenleiste und füllen Sie das Formular wie unten gezeigt aus:

Sie können zwischen den drei Hosting-Diensten Google Cloud, Amazon Web Services und Microsoft Azure wählen. Alle sind kostenlos und erfordern keinerlei Einrichtung. Ich habe mich für Google Cloud entschieden, weil nur dieser Dienst die indische Region bedient. Nach dem Ausfüllen der Details klicken Sie auf die Schaltfläche Datenbank erstellen und Sie sollten auf die Startseite weitergeleitet werden, von hier aus klicken Sie auf die Datenbank, die Sie gerade in der Seitenleiste erstellt haben.

Klicken Sie nun auf der Datenbankseite in der Navigationsleiste auf die Registerkarte „Verbinden“.

Kopieren Sie nun auf dieser Seite im Abschnitt Verbinden über eine API >> Dokument-API die Umgebungsvariablen, die Sie exportieren müssen, in den rechten Teil der Seite. 

Und um den app_token zu erhalten, können wir zu Organisationseinstellungen >> Token Management gehen oder auf den Link klicken, der im ersten Punkt der Voraussetzungen angegeben ist.

Hier können wir unseren app_token erhalten, indem wir eine Benutzerrolle auswählen, und die Berechtigung wird entsprechend vergeben. Da wir nur eine kleine Demo-Anwendung erstellen und diese nicht viel nutzen werden, können wir einfach die Benutzerrolle Lesen/Schreiben wählen. Sie können die Rollenberechtigung auch unten sehen, so dass Sie leicht etwas anderes wählen können, wenn Sie möchten. Nachdem Sie die Rolle ausgewählt haben, klicken Sie auf die Schaltfläche Token generieren. 

Wenn die Token erfolgreich erstellt wurden, sollten Sie ein Ergebnis wie dieses erhalten:

Wie Sie sehen können, haben wir unser Token sowie eine Client-ID und ein Client-Geheimnis erhalten. Laden Sie diese herunter und bewahren Sie sie an einem sicheren Ort auf, da Sie sie auf der Website nicht mehr sehen werden. Legen Sie außerdem den Token-Wert in ASTRA_DB_APPLICATION_TOKEN ab, so dass unsere IDs wie folgt aussehen würden:

export ASTRA_DB_ID=57482bbd-c72e-4ba4-afdc-7c4e230701c4
export ASTRA_DB_REGION=asia-south1
export ASTRA_DB_KEYSPACE=cassandra_keyspace
export ASTRA_DB_APPLICATION_TOKEN=AstraCS:ulDBRyZovIyoTxOhNMxuXjxH:5a578dd322cd88cd33bce6513acdb89694572d669a0ddd0a08eacde662af9ecd

Diese vollständige Dokumenten-API ermöglicht es Ihnen, JSON-Dokumente in der von Ihnen erstellten Astra-DB zu speichern, und zwar ohne Schema, was bedeutet, dass keine Datenmodellierung erforderlich ist! 

Erstellen einer kleinen Anwendung 

Sobald Sie die oben genannten Schritte durchgeführt haben, können wir mit dem Aufbau einer sehr einfachen Anwendung beginnen, mit der wir experimentieren können. Zunächst werden wir uns bei Datastax Astra mit Hilfe der Token-Authentifizierung authentifizieren. Und sobald wir unser HTTP-Client-Objekt haben, wird es an die nächste Methode übergeben, in der wir ein JSON-Dokument erstellen und in eine Astra-Sammlung einfügen. Der Code kann wie folgt geschrieben werden:

import os, uuid
from astrapy.rest import create_client, http_methods

def getAstraHTTPClient():
    """Enter your own IDs here"""

    ASTRA_DB_ID = "57482bbd-c72e-4ba4-afdc-7c4e230701c4"
    ASTRA_DB_REGION = "asia-south1"
    ASTRA_DB_APPLICATION_TOKEN = "AstraCS:ulDBRyZovIyoTxOhNMxuXjxH:5a578dd322cd88cd33bce6513acdb89694572d669a0ddd0a08eacde662af9ecd"
   
    # setup an Astra Client
    return create_client(astra_database_id=ASTRA_DB_ID,
                        astra_database_region=ASTRA_DB_REGION,
                        astra_application_token=ASTRA_DB_APPLICATION_TOKEN)

def createJSONonAstra(astra_http_client):

    doc_uuid = uuid.uuid4()
    ASTRA_DB_KEYSPACE = os.environ.get('ASTRA_DB_KEYSPACE')
    ASTRA_DB_COLLECTION = os.environ.get('ASTRA_DB_COLLECTION')

    astra_http_client.request(
        method=http_methods.PUT,
        path=f"/api/rest/v2/namespaces/{ASTRA_DB_KEYSPACE}/collections/{ASTRA_DB_COLLECTION}/{doc_uuid}",
        json_data={
            "book": "The Hunger Games",
            "author": "Suzanne Collins",
            "genre": ["fiction"],
        })

Um nun diese Daten an Astra zu senden, müssen wir diese Datei ausführen, was mit folgender Methode geschehen kann:

python3 main.py  #Linux/Mac python main.py  #Windows

Wenn es keine Fehler zurückgibt, wurde der Vorgang erfolgreich durchgeführt. Schließlich können wir bestätigen, dass das Dokument erfolgreich eingefügt werden konnte. Dies können wir tun, indem wir einen curl-Befehl eingeben, um es über die Befehlszeile abzurufen. 

curl --request GET \
--url https://$ASTRA_DB_ID-$ASTRA_DB_REGION.apps.astra.datastax.com/api/rest/v2/namespaces/$ASTRA_DB_KEYSPACE/collections/main\
-H "X-Cassandra-Token: $ASTRA_DB_APPLICATION_TOKEN" \
-H 'Content-Type: application/json' 

Hinweis: Es kann einige Zeit dauern, bis die Ergebnisse angezeigt werden. Wenn alles richtig funktioniert hat, werden Sie ein Ergebnis wie dieses sehen:

{
"pageState": "3Bykb2N1bWVudElkIjoiNTNhMzRmYzItZjg1ZC00NWE4LTgwNmQtYTJkMTk0MDA0ZmYxIiwiaW50ZXJuYGsDdASdjh2q3IifQ==",
  "data": {
    "53a34fc2-f85d-45a8-806d-a2d194004ff1": {
      "author": "Suzanne Collins",
      "book": "The Hunger Games",
      "genre": [
        "fiction"
      ]
    }
  }
}  

Schlussfolgerung

Apache Cassandra ist ein kostenloses und quelloffenes verteiltes Datenbankmanagementsystem, das von Unternehmen, Start-ups und kleinen Firmen gleichermaßen genutzt wird. Cassandra ist extrem skalierbar und kann Billionen von Datensätzen mit sehr geringen Latenzzeiten verarbeiten. In diesem Blog haben wir die Schritte für den Einstieg in Cassandra in DataStax Astra erkundet und einige Daten damit abgerufen. Dies waren die grundlegendsten Funktionen, und wir hoffen, dass Sie lernen, diese Schritte zu nutzen. Aber hören Sie hier nicht auf! Obwohl Cassandra eine großartige Datenbanktechnologie ist, sind die Dokumentation und die Anwendungen an sich auch mächtige Werkzeuge. Wenn Sie also weitere Informationen benötigen, sind die Handbuchseiten von Cassandra und die herunterladbaren Toolkits die besten Orte, um nach Hilfe zu suchen.