Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 卡桑德拉:需要插入数千条记录 我使用卡桑德拉和C++驱动程序,当我插入数千行时,我观察到了非常慢的性能。我使用的是带有8Go Ram和4CPU的VM Ubuntu 12.04 LTS_Performance_Cassandra_Cql3_Nosql - Fatal编程技术网

Performance 卡桑德拉:需要插入数千条记录 我使用卡桑德拉和C++驱动程序,当我插入数千行时,我观察到了非常慢的性能。我使用的是带有8Go Ram和4CPU的VM Ubuntu 12.04 LTS

Performance 卡桑德拉:需要插入数千条记录 我使用卡桑德拉和C++驱动程序,当我插入数千行时,我观察到了非常慢的性能。我使用的是带有8Go Ram和4CPU的VM Ubuntu 12.04 LTS,performance,cassandra,cql3,nosql,Performance,Cassandra,Cql3,Nosql,我有一个ascii文件,其中包含15800条记录,我正在尝试读取每条记录,并用它们填充我的cassandra db表。复制命令花费了大约1分钟30秒。一个接一个地读取每条记录后进行查询大约需要6-7分钟,而批量查询则需要持续30分钟,因此我放弃了 我想知道,对于这种插入,是否有任何性能更快的解决方案 非常感谢 以下是我的源代码: string create_query = "BEGIN BATCH "; std::ifstream file("/media/sf_Shared/xfmge");

我有一个ascii文件,其中包含15800条记录,我正在尝试读取每条记录,并用它们填充我的cassandra db表。复制命令花费了大约1分钟30秒。一个接一个地读取每条记录后进行查询大约需要6-7分钟,而批量查询则需要持续30分钟,因此我放弃了

我想知道,对于这种插入,是否有任何性能更快的解决方案


非常感谢

以下是我的源代码:

string create_query = "BEGIN BATCH ";
std::ifstream file("/media/sf_Shared/xfmge");
for(string line; getline(file, line);){
    stringstream sstm;
    record = (char*)line.c_str();
    sstm << "insert into felder (id, data) values ('felder', '" << record << "') ";
    create_query += sstm.str();
}
create_query += " APPLY BATCH;";

boost::shared_ptr<cql::cql_query_t> create(
        new cql::cql_query_t(create_query, cql::CQL_CONSISTENCY_ONE));
query_result = session->query(create);
cout << "sending..." << endl;
query_result.wait();
if (query_result.get().error.is_err()) {
    cout << "-isbuild - ERROR in query: " << create_query << endl;
    cout << query_result.get().error.message << endl;
    return iserrno;
} else {
    cout << "+isbuild - QUERY SUCCESSFUL: " << create_query << endl;
}

我通过切片将时间间隔缩短到12.5秒。这是一个解决方案,如果它能帮助其他人,如果其他人能提供更好的解决方案,我会很高兴:

int nb_lines = 0;
int rest = 0;
string create_query = "BEGIN BATCH ";
std::ifstream file("/media/sf_Shared/xfmge");
for(string line; getline(file, line);){
    stringstream sstm;
    if(nb_lines  == 800 ) {
        nb_lines = 0;
        rest = 0;
        create_query += " APPLY BATCH;";
        boost::shared_ptr<cql::cql_query_t> create(
            new cql::cql_query_t(create_query, cql::CQL_CONSISTENCY_ONE));
        query_result = session->query(create);

        query_result.wait();
        if (query_result.get().error.is_err()) {
            cout << "-isbuild - ERROR for query: " << create_query << endl;
            cout << query_result.get().error.message << endl;
            return iserrno;
        } else {
            cout << "+isbuild - QUERY SUCCESSFUL: " << create_query << endl;
        }
        create_query = "BEGIN BATCH ";
    } else {
        record = (char*)line.c_str();
        sstm << "insert into felder (id, data) values ('felder', '" << record << "') ";
        create_query += sstm.str();
        rest = 1;
    }
    nb_lines ++;
}
if(rest == 1){
    create_query += " APPLY BATCH";
    boost::shared_ptr<cql::cql_query_t> create(
        new cql::cql_query_t(create_query, cql::CQL_CONSISTENCY_ONE));
    query_result = session->query(create);

    query_result.wait();
    if (query_result.get().error.is_err()) {
        cout << "-isbuild - ERROR for query: " << create_query << endl;
        cout << query_result.get().error.message << endl;
        return iserrno;
    } else {
        cout << "+isbuild - QUERY SUCCESSFUL: " << create_query << endl;
    }   

}

这里没有足够的信息告诉你。首先,我要获得一些更详细的指标——整个流程中的单个指标并不能精确指出哪些活动是缓慢的。为每个活动安排一些时间,找出最大的贡献者是什么。您还需要共享一些代码,这样我们就可以看到是否有任何明显的错误,例如每次插入都有一个新的会话或准备好的语句。我使用sstableloader实用程序在几分钟内导入了大量数据,确实需要一些修改。你的Ubuntu虚拟机是否有用于交换的挂载点?在Cassandra Linux服务器上,应完全禁用交换。