2

我正在使用 Aerospike 4.8v 并将我的数据保存在磁盘上,并且我正在向 aerospike 发出并行写入请求,如果我发出 10 个并行请求,那么它工作正常,但是当我发出 100 个并行请求时它会给出错误,即此时不允许操作,使用代码 22。我认为 aerospike 必须能够并行处理数百或数千个请求,但我不知道出了什么问题,所以如果有人可以指导这将是有帮助的。

错误日志:

 error : { AerospikeError: Operation not allowed at this time.
    at Function.fromASError (/data/codebase/lib/node_modules/aerospike/lib/error.js:113:21)
    at QueryCommand.convertError (/data/codebase/lib/node_modules/aerospike/lib/commands/command.js:91:27)
    at QueryCommand.convertResponse (/data/codebase/lib/node_modules/aerospike/lib/commands/command.js:101:24)
    at asCallback (/data/codebase/lib/node_modules/aerospike/lib/commands/command.js:163:24)
  name: 'AerospikeError',
  code: 22,
  command:
   QueryCommand {
     client:
      Client {
        domain: null,
        _events: {},
        _eventsCount: 0,
        _maxListeners: undefined,
        config: [Object],
        as_client: AerospikeClient {},
        connected: true,
        captureStackTraces: false },
     args: [ 'antiSpamming', 'userTargetingMatrix', [Object], undefined ],
     captureStackTraces: false,
     key: undefined,
     ensureConnected: true,
     stream:
      RecordStream {
        aborted: false,
        client: [Object],
        _events: [Object],
        _eventsCount: 3 } },
  func: 'as_query_parse_records_async',
  file: 'src/main/aerospike/aerospike_query.c',
  line: 246,
  inDoubt: false }

警告日志:

Jan 28 06:03:25 ip-1-0-4-78 asd[32437]: Jan 28 2020 06:03:25 GMT: WARNING (scan): (scan_manager.c:103) at scan threads limit - can't start new scan
Jan 28 06:03:25 ip-1-0-4-78 asd[32437]: Jan 28 2020 06:03:25 GMT: WARNING (scan): (scan.c:676) basic scan job 5614303283813349397 failed to start (22)

4

1 回答 1

2

您很可能会超出与查询相关的默认限制。首先,查看错误代码 22的定义:

对于使用服务器 4.7 或更高版本的扫描,没有可用的线程(scan-threads-limit已达到)。

根据您的其他问题,您正在执行扫描而不是使用二级索引进行查询。您需要按照“附加信息”中的建议提高该限制。但是,您的系统在 CPU 方面非常薄弱,因此您应该调整该值和基准,比较相同工作负载前后的性能。在一个真实的生产系统中,您将拥有多个节点,可能需要两个以上的 CPU 内核,并根据需要类似地调整扫描线程。

于 2020-01-28T17:17:24.693 回答