c++ - 我可以像 nodetool 那样强制从 C/C++ 驱动程序刷新 Cassandra 表吗?

标签 c++ cassandra driver cassandra-3.0

我想知道是否可以从 Cassandra 的 C/C++ 驱动程序复制在 nodetool 实用程序中找到的 forceKeyspaceFlush() 函数。

nodetool 函数如下所示:

public class Flush extends NodeToolCmd
{
    @Arguments(usage = "[<keyspace> <tables>...]", description = "The keyspace followed by one or many tables")
    private List<String> args = new ArrayList<>();

    @Override
    public void execute(NodeProbe probe)
    {
        List<String> keyspaces = parseOptionalKeyspace(args, probe);
        String[] tableNames = parseOptionalTables(args);

        for (String keyspace : keyspaces)
        {
            try
            {
                probe.forceKeyspaceFlush(keyspace, tableNames);
            } catch (Exception e)
            {
                throw new RuntimeException("Error occurred during flushing", e);
            }
        }
    }
}

我想在我的 C++ 软件中复制的是这一行:

probe.forceKeyspaceFlush(keyspace, tableNames);

可能吗?

最佳答案

这是一个不寻常的请求,主要是因为 Cassandra 被设计为分布式,因此如果您正在执行查询,则需要对每个(可能有很多)拷贝执行阻塞刷新。我不会让您相信您并不真正需要这个,而是尝试回答您的问题 - 但是,您可能并不真正需要这个。

Nodetool 正在使用 JMX 接口(interface)(在 tcp/7199 上)强制刷新 - 您的 c/c++ 驱动程序通过 native 协议(protocol)(在 tcp/9042 上)进行对话。此时,无法通过 the native protocol 进行刷新.

要解决这个限制,您需要执行一个支持 jmx 的命令行实用程序(nodetool 或其他),用 c++ 实现 JMX 客户端(已经完成),或者扩展 native 协议(protocol)。这些都不是特别令人愉快的选择,但我认为执行 jmx CLI 实用程序比其他两个实用程序要容易得多。

关于c++ - 我可以像 nodetool 那样强制从 C/C++ 驱动程序刷新 Cassandra 表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36730101/

相关文章:

c++ - Const 重载和多态性

c++ - std::basic_ostream 在 C++ 中不可访问

c++ - 如何在 mac os x 上从通过 USB 连接的多轨混音器获取输入

c# - 使用 Datastax Cassandra CSharp LINQ Batch 时,有没有办法创建未记录的批处理?

c - SC 启动服务失败 1058

c# - 如何设置 Firefox 配置文件 : Selenium RC, .Net 客户端驱动程序?

c - 按照基本示例构建 .c 文件来创建驱动程序将不起作用

c++ - Visual Studio 2010 OpenCV 多线程垫不复制到另一个垫

Django Cassandra 引擎 - 如何定义表名

Cassandra 问题 v3.11.3 ... 从表 1 中选择计数 (*)