0

我写了libQtCassandra,当前版本不支持超级列。不添加该支持的一个原因是它破坏了库使用的方案,为用户提供了一种使用数组运算符 ([]) 访问和写入数据的方法。

如果您不熟悉,该库让您创建一个“上下文”(与 Ca​​ssandra 集群的连接),您可以从该上下文中编写如下内容:

// set value 123 in "column name" of "row key" of "column family":
context["column family"]["row key"]["column name"] = 123;
// retrieve that value:
int value = context["column family"]["row key"]["column name"];

所以……很简单。但是,如果我们引入超级列,我们会增加一个数组访问,这取决于是否存在超级列。你会怎么做?

你会使用函数来访问超级列吗?

context["column family"]["row key"].sc("super column")["column name"] = 123;

或者你会让超级列像其他参数一样无缝工作?

context["column family"]["row key"]["super column"]["column name"] = 123;

显然系统(列族)知道什么是什么。所以无论哪种方式都很容易实现,只是它使库变得更加复杂,以支持超级列的数组语法。

我有另一个想法是添加一个可以在指定行时使用的对象。但这看起来相当难看:

context["column family"][sc("row key", "super column")]["column name"] = 123;

这更容易实现,但在查看最终代码时看起来不太好。

对于这样的问题,什么是更像 stl 或类似 boost 的方法?

4

1 回答 1

2

Seems like introducing supercolumn support would only continue to encourage the use of a deprecated feature. Use of alternatives such as composites are a better approach to solving problems that push people toward supercolumns. I'm not sure the effort wouldn't actually be a movement in the wrong direction. In the meantime, if people MUST access supercolumns from a C++ app, they can do so using Thrift.

所以我的建议是讨论一种在 libQtCassandra 中添加复合支持的方法,因为它目前似乎不存在。通过这种方式,我们鼓励用户通过更轻松地访问正确的结构来做出更明智的数据模型选择。

于 2012-08-23T14:52:35.390 回答