使用Alia/Hayt为Clojure类型编程生成Cassandra CQL



我有一个空白的Cassandra 2.1数据存储,我正试图以编程方式填充它,从Clojure的键空间向下,使用Alia和Hayt。它被用作从客户端接收JSON数据的web服务端点后面的数据存储。

我希望能够解析传入的数据到Clojure实例,稍微改变数据(添加另一个键,值对映射,例如),并将数据插入到数据存储中,这样我就可以检索它作为一个Clojure实例。

一切都像我期望的那样工作,除了我无法创建一个合适的列,Cassandra很乐意将我的nippy编码的数据放入其中!

是否有我错过的东西(我的代码目前)?

(def alia-cluster (cluster {:contact-points ["127.0.0.1"]}))
(def session (connect alia-cluster))
(execute session
         (create-keyspace :ks
                          (if-not-exists)
                          (with {:replication {:class "SimpleStrategy"
                                               :replication_factor 1}})))
(execute session
         (use-keyspace :ks))
(execute session
         (create-table :d
                       (if-not-exists)
                       (column-definitions [[:k :XXXXX]
                                            [:primary-key :k]])))
(set-nippy-collection-encoder!)
(set-nippy-decoder!)

我已经尝试了几乎所有的XXXX -但似乎没有工作!

如有任何建议,不胜感激。

干杯!

我不认为:bytes是CQL中的有效类型,它应该是:blob。也就是说,在这个漂亮的编解码器中有一个bug(被标记为实验性的)。它现在是固定的,如果你拉2.5.2这应该工作:

(use 'qbits.alia)
(use 'qbits.alia.codec.nippy)
(def c (cluster {:contact-points ["localhost"]}))
(def s (connect c))
(set-nippy-decoder!)
(set-nippy-collection-encoder!)
(execute s "use ks;")
(execute s "insert into d (k) values (?);" {:values [[1 2 3]]})
(execute s "select * from d;")

(这应该也可以正常工作)

欢呼

最新更新