客户端序列化问题:在 Trident 函数中从 Couchbase 读取
Client serialization issue: read from Couchbase in Trident function
基本上,我想从 Couchbase 中读取一些带有元组属性的附加属性,例如,元组具有输入字段“{a, b, c}”,我想发出一个元组“{a, b, c, d, e}”,其中 "d" 和 "e" 是以 "a" 作为键从 Couchbase 中读取的。
但是,Trident BaseFunction 是可序列化的,而 CouchbaseClient 不是,这会导致 "NotSerializable" 异常,是否有办法解决这个问题?我能想到两种可能的解决方案:
1)读取Trident之外的附加属性,一起发送给Trident(我不想这样做,因为我想把这种处理放在Storm中)
2)使用state,只读(只实现multi-get,multi-put留空,不知道这样行不行)
有什么简单的方法可以做到这一点吗?这在 Storm 本身应该是可爱的,并且在现实世界中很常见。它也适用于像 Cassandra 这样的其他 NoSQL 数据库。谢谢。
您可以在函数的 prepare()
方法中创建数据库连接,或使用 queryState
一次查找批处理的所有值。
基本上,我想从 Couchbase 中读取一些带有元组属性的附加属性,例如,元组具有输入字段“{a, b, c}”,我想发出一个元组“{a, b, c, d, e}”,其中 "d" 和 "e" 是以 "a" 作为键从 Couchbase 中读取的。
但是,Trident BaseFunction 是可序列化的,而 CouchbaseClient 不是,这会导致 "NotSerializable" 异常,是否有办法解决这个问题?我能想到两种可能的解决方案:
1)读取Trident之外的附加属性,一起发送给Trident(我不想这样做,因为我想把这种处理放在Storm中)
2)使用state,只读(只实现multi-get,multi-put留空,不知道这样行不行)
有什么简单的方法可以做到这一点吗?这在 Storm 本身应该是可爱的,并且在现实世界中很常见。它也适用于像 Cassandra 这样的其他 NoSQL 数据库。谢谢。
您可以在函数的 prepare()
方法中创建数据库连接,或使用 queryState
一次查找批处理的所有值。