我们使用Cassandra作为数据库,大多数表具有模式(并通过CQL创建),还有一些通过Thrift API定义的旧表,即使用COMPACT STORAGE并具有相当多的动态列。
一个典型的例子是Accounts
表,其中有许多标签,标志等插入到用户数据中。
代码可以轻松地获取,解码和操作这些动态列的Blob。例如。通过cassandra-cli,您可以将一些帐户列为:
RowKey: bfc4c12b-abcd-defg-90ca-0a56870596e1
=> (name=country, value=US, timestamp=1384489319659000)
=> (name=email, value=someperson@goodserver.org, timestamp=1384489425826000)
=> (name=ourCode, value=12345, timestamp=1384489319550005)
=> (name=flag_ab_notice_twoweeks, value=text, timestamp=1385943698049000)
=> (name=flag_client, value=4d6f7a696c6c612f352e3020286950686f6e653b20435055206950686f6e65204f5320375f305f33206c696b65204d6163204f53205829204170706c655765624b69742f3533372e35312e3120284b48544d4c2c206c696b65204765636b6f29204d6f62696c652f313142353131205468696e674c696e6b2f312e372e312e313233, timestamp=1384489319637000)
=> (name=flag_orgindustry, value=, timestamp=1435153936346000)
=> (name=flag_orgsize, value=736d616c6c, timestamp=1435153936458000)
=> (name=flag_orgtype, value=5363686f6f6c, timestamp=1435153936450000)
=> (name=flag_registeredWith, value=email, timestamp=1384489319617000)
=> (name=flag_registrationFunnel, value=api, timestamp=1384489319601000)
=> (name=flag_statsEmails, value=true, timestamp=1384489322779000)
=> (name=lastTOSApproved, value=0000014259fe7ced, timestamp=1384489319661000)
=> (name=name, value=John, timestamp=1384489425826001)
=> (name=password, value=12345678, timestamp=1384489425826002)
=> (name=primaryId, value=bfc4c12b-abcd-defg-90ca-0a56870596e1, timestamp=1384489319550001)
=> (name=roles, value=user, timestamp=1384489319550002)
=> (name=salt, value=123456789, timestamp=1384489425826003)
当我通过CQL查看相同的数据时,我可以看到一些列(用模式定义的那些)并且看不到另一个列(例如列" salt"在我的情况下,最初由a创建使用Hector驱动程序和HFactory.createColumn("salt", byteArrayOfAUtf8StringValue)
的Java客户端。好吧,cqlsh无法显示动态的thrift创建的列名称,例如在https://www.pythian.com/blog/effective-approach-migrate-dynamic-thrift-data-cql-part-2/,但我仍然无法理解。
问题
祝你好运, 阿尔乔姆。