関連keyspaceに気をつけろ

cassandra_objectでは、associationメソッドを使って、belongs_to, has_manyに当たるものを宣言します。
http://github.com/NZKoz/cassandra_object/blob/master/test/fixture_models.rb

よくよく見てみると、関連のためのFKのようなカラムの定義がありません。どこに保存されているんだろうと思って調べてみたら、別のKeyspaceに保存されてました。

http://github.com/NZKoz/cassandra_object/blob/master/lib/cassandra_object/associations/one_to_one.rb
http://github.com/NZKoz/cassandra_object/blob/master/lib/cassandra_object/associations/one_to_many.rb

それぞれにcolumn_familyというメソッドが定義してあり、関連先のidなどはその名前の別のカラムファミリに、関連名をスーパーカラムとして、insertされます。

なので、cassandra_objectのテストで投入されたデータは以下のようになります。

cassandra> get CassandraObject.Customers['091e6658-6a33-11df-8608-e83b940b4438']
=> (column=schema_version, value=0, timestamp=1275036334211015)
=> (column=last_name, value=Koziarski, timestamp=1275035327327099)
=> (column=first_name, value=Michael, timestamp=1275035327327099)
=> (column=date_of_birth, value=1980-08-15, timestamp=1275035327327099)
Returned 4 results.
cassandra> 
cassandra> get CassandraObject.Invoices['564ebdb8-6a35-11df-957a-ba403d66eadf'] 
=> (column=total, value=3000.0, timestamp=1275036315832317)
=> (column=schema_version, value=2, timestamp=1275036315832317)
=> (column=number, value=1, timestamp=1275036315832317)
=> (column=gst_number, value=66-666-666, timestamp=1275036315832317)
Returned 4 results.
cassandra> 
cassandra> get CassandraObject.InvoiceRelationships['564ebdb8-6a35-11df-957a-ba403d66eadf']
=> (super_column=customer,
     (column=^JY?j5?0hY?k8?, value=091e6658-6a33-11df-8608-e83b940b4438, timestamp=1275036329214711))
Returned 1 results.
cassandra> 
cassandra> get CassandraObject.CustomerRelationships['091e6658-6a33-11df-8608-e83b940b4438']
=> (super_column=invoices,
     (column=^Gb?j5?F??, value=564ebdb8-6a35-11df-957a-ba403d66eadf, timestamp=1275036329195299))
Returned 1 results.
cassandra>