2016-04-09 8 views
2

Bitte helfen Sie mir zu verstehen, warum Cassandra Nullwerte in Spalten einfügt, die übersprungen wurden? Soll die Spalte nicht übersprungen werden? Es sollte keinen Wert (nicht einmal null) einfügen, wenn ich die Spalte beim Einfügen von Daten komplett überspringe? Ich bin ein wenig verwirrt, weil nach dem folgenden Tutorial Daten nach Zeilenschlüssel mit den Spalten gespeichert werden (das Diagramm in der Spaltenfamilie), wenn es wahr ist, dann sollte ich nicht Null für die Spalte erhalten.Cassandra fügt Nullwerte in übersprungene Spalte ein

Oder ist das ganze Konzept, das ich über die Cassandra-Säulenfamilie gelernt habe, falsch?

http://www.tutorialspoint.com/cassandra/cassandra_data_model.htm

Hier ist die CQL Skript

create keyspace test WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'}; 
create table users (firstname text,lastname text,age int, gender ascii, primary key(firstname)) 
insert into users(firstname,age,gender,lastname) values("Michael",30,"male","smith"); 

Hier habe ich eine Spalte bin Skipping, aber wenn ich wählen Sie Abfrage ausführen, zeigt es für diese Spalte null. Warum füllt Cassandra in dieser Spalte null?

insert into users(firstname,age,gender) values('Jane',23,'female'); 

select * from users; 

Antwort

1
  1. Warum gehst du nicht auf die umfassendste Quelle für die Dokumentation und das Lernen für Cassandra: http://academy.datastax.com? Und es ist frei. Der Inhalt und die tutorialspoint.com ist sehr alt und nicht seit Jahren aktualisiert (SuperColumn sind seit 2011 veraltet - 2012 ...)

  2. Hier bin ich das Überspringen einer Spalte, aber wenn ich wählen Sie Abfrage ausführen, zeigt es Null für diese Spalte. Warum füllt Cassandra in dieser Spalte null?

In CQL, null == Wert nicht vorhanden oder Wert

gelöscht wurde

Da Sie keinen Wert für die Spalte Nachnamen einfügen haben Cassandra null zurück (= = in diesem Fall nicht vorhanden)

+1

Da C * kein Read-Before-Write ausführt, ist es nicht so, dass C * immer annehmen muss, dass ein fehlender Wert gelöscht wurde und somit immer ein Tombstone erzeugt, auch für Spalten wurden nie geschrieben? Mit anderen Worten, ist der Zustand von _not present_ bei Verwendung von CQL kein hypothetischer? – Ralf

+0

Die Zustände * nicht vorhanden * und * löschen * sind bei ** Lesezeit ** (CQL SELECT) sicher bekannt. Wenn Sie INSERT die Spalte nicht angeben, wird Cassandra nichts tun (kein Tombstone). Wenn Ihr Einfügen ** null ** Cassandra wird Grabstein für die Spalte – doanduyhai

+0

Ah, rechts erstellen. Ich habe mich mit vorbereiteten Aussagen und NULLs in das Thema vertieft. – Ralf

Verwandte Themen