协调器节点在Cassandra cqlsh shell上超时

时间:2017-03-28 10:59:38

标签: cassandra

我是cassandra的新手并试图在两台Mac机器上进行多节点设置。它不是数据库casandra。 比如我的IP是10.100.1.12而其他机器的IP是10.100.1.15。我在机器上的cassandra.yaml文件中更改了以下属性:

10.100.1.15:

  • 种子:" 127.0.0.1,10.100.1.12,10.100.1.15"
  • listen_address:10.100.1.15
  • rpc_address:10.100.1.15
  • endpoint_snitch:GossipingPropertyFileSnitch

10.100.1.12:

  • 种子:" 127.0.0.1,10.100.1.12,10.100.1.15"
  • listen_address:10.100.1.12
  • rpc_address:10.100.1.12
  • endpoint_snitch:GossipingPropertyFileSnitch

    cassandra运行正常cqlsh也在使用该命令打开 bin / cqlsh 10.100.1.12

但是当我试图检索表的数量时,它向我显示错误:

ReadTimeout:来自服务器的错误:代码= 1200 [协调器节点超时等待副本节点'响应]消息="操作超时 - 仅收到0个响应。" info = {' received_responses':0,' required_responses':1,'一致性':' ONE'}

我尝试将read_request_timeout_in_ms属性从5000更改为20000,但我仍然得到相同的错误。谁能帮助我做错了什么?

表模式如下:

cqlsh:app_auditor> describe table traffic_data;

CREATE TABLE app_auditor.traffic_data (
    current_time bigint PRIMARY KEY,
    appid bigint,
    attributes map<text, text>,
    device bigint,
    flow_type text,
    message_time bigint
) WITH bloom_filter_fp_chance = 0.01
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
    AND comment = ''
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
    AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
    AND crc_check_chance = 1.0
    AND dclocal_read_repair_chance = 0.1
    AND default_time_to_live = 0
    AND gc_grace_seconds = 86400
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair_chance = 0.0
    AND speculative_retry = '99PERCENTILE';

我使用的计数查询是 从traffic_data中选择count(*);

1 个答案:

答案 0 :(得分:2)

在Cassandra中,计数(*)非常昂贵,cassandra需要扫描所有节点的所有行,只是为了给你计数,这就是它为什么会给你超时异常的原因。

而不是使用count(*)维护一个计数器表,如下所示:

function table()
{
    $client2 = new client2();
    if (isset($_POST['btn-signup'])) 
    {  
        try
        {   
            $results=$client2->allClients();

            foreach(array ($results) as $row) 
            {
                echo '<tr>';  
                echo '<td>' . $row['id'] . '</td>';
                echo '<td>' . $row['name'] . '</td>';
                echo '<td>' . $row['email'] . '</td>';
                echo '</tr>';

            }

        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }
    }

}


/* Set this line where your static rows now are */
<table id="data-table-command" class="table table-striped table-vmiddle">
                        <thead>
                            <tr>
                                <th data-column-id="id" data-type="numeric">ID</th>
                                <th data-column-id="sender">Sender</th>
                                <th data-column-id="received" data-order="desc">Received</th>
                                <th data-column-id="commands" data-formatter="commands" data-sortable="false">Commands</th>
                            </tr>
                        </thead>
                        <tbody>
                           <?php table(); ?>
                        </tbody>
                    </table>

当数据插入traffic_data数据时,增加traffic_count的值

CREATE TABLE traffic_counter (
    type int PRIMARY KEY,
    traffic_count counter
);

现在您可以非常有效地选择流量计数。

UPDATE traffic_counter SET traffic_count = traffic_count + 1 WHERE type = 0;