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

Programmatically generating Cassandra CQL for Clojure type using Alia/Hayt

我有一个空白的 Cassandra 2.1 数据存储,我正尝试使用 Alia 和 Hayt 从 Clojure 中的键空间向下以编程方式填充它。这被用作从客户端接收 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。那就是说 nippy 编解码器中存在错误(标记为实验性)。它现在已修复,如果你拉 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;")

(这应该也适用于 hayt)

干杯