เดฒเต‹เด—เตเด•เตพ เด•เดพเดฃเตเดจเตเดจเดคเดฟเดจเต เดฒเต‹เด•เดคเตเดคเดฟเดฒเต† เดเดฑเตเดฑเดตเตเด‚ เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเดฏ เด‡เดจเตเดฑเตผเดซเต‡เดธเต เดžเด™เตเด™เตพ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเด•เตเด•เตเด•เดฏเดพเดฃเต

เดฒเต‹เด—เตเด•เตพ เด•เดพเดฃเตเดจเตเดจเดคเดฟเดจเต เดฒเต‹เด•เดคเตเดคเดฟเดฒเต† เดเดฑเตเดฑเดตเตเด‚ เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเดฏ เด‡เดจเตเดฑเตผเดซเต‡เดธเต เดžเด™เตเด™เตพ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเด•เตเด•เตเด•เดฏเดพเดฃเต เดฒเต‹เด—เตเด•เตพ เด•เดพเดฃเตเดจเตเดจเดคเดฟเดจเต เดจเดฟเด™เตเด™เตพ เดŽเดชเตเดชเต‹เดดเต†เด™เตเด•เดฟเดฒเตเด‚ เดตเต†เดฌเต เด‡เดจเตเดฑเตผเดซเต‡เดธเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดšเดŸเตเดŸเด‚ เดชเต‹เดฒเต†, เดˆ เด‡เดจเตเดฑเตผเดซเต‡เดธเตเด•เตพ เดŽเด™เตเด™เดจเต† เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเตเดณเตเดณเดคเตเด‚ (เดชเดฒเดชเตเดชเต‹เดดเตเด‚) เดตเดณเดฐเต† เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดตเตเด‚ เดชเตเดฐเดคเดฟเด•เดฐเดฟเด•เตเด•เดพเดคเตเดคเดคเตเดฎเดพเดฃเต†เดจเตเดจเต เดจเดฟเด™เตเด™เตพ เดถเตเดฐเดฆเตเดงเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เดพเด‚. เดšเดฟเดฒเดคเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดชเดฐเดฟเดšเดฟเดคเดฎเดพเดฃเต, เดšเดฟเดฒเดคเต เดคเดฟเด•เดšเตเดšเตเด‚ เดญเดฏเดพเดจเด•เดฎเดพเดฃเต, เดŽเดจเตเดจเดพเตฝ เดŽเดฒเตเดฒเดพ เดชเตเดฐเดถเตเดจเด™เตเด™เตพเด•เตเด•เตเด‚ เด•เดพเดฐเดฃเด‚ เดฒเต‹เด—เตเด•เตพ เด•เดพเดฃเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดšเตเดฎเดคเดฒเดฏเต† เดžเด™เตเด™เตพ เดคเต†เดฑเตเดฑเดพเดฏเดฟ เดธเดฎเต€เดชเดฟเด•เตเด•เตเดจเตเดจเดคเดพเดฃเต เดŽเดจเตเดจเต เดŽเดจเดฟเด•เตเด•เต เดคเต‹เดจเตเดจเตเดจเตเดจเต: CLI (เด•เดฎเดพเตปเดกเต เดฒเตˆเตป เด‡เดจเตเดฑเตผเดซเต‡เดธเต) เด‰เดณเตเดณ เด’เดฐเต เดตเต†เดฌเต เด‡เดจเตเดฑเตผเดซเต‡เดธเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป เดžเด™เตเด™เตพ เดถเตเดฐเดฎเดฟเด•เตเด•เตเดจเตเดจเต. เดจเดจเตเดจเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต. เดŸเต†เดฏเดฟเตฝ, grep, awk เดŽเดจเตเดจเดฟเดตเดฏเตโ€Œเด•เตเด•เตŠเดชเตเดชเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเต เดŽเดจเดฟเด•เตเด•เต เดตเตเดฏเด•เตเดคเดฟเดชเดฐเดฎเดพเดฏเดฟ เดตเดณเดฐเต† เดธเตเด–เด•เดฐเดฎเดพเดฃเต, เด…เดคเดฟเดจเดพเตฝ เดฒเต‹เด—เตเด•เตพเด•เตเด•เตŠเดชเตเดชเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดŽเดจเดฟเด•เตเด•เต เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฏ เด‡เดจเตเดฑเตผเดซเต‡เดธเต tail, grep เดŽเดจเตเดจเดฟเดตเดฏเตเด•เตเด•เต เดธเดฎเดพเดจเดฎเดพเดฏ เด’เดจเตเดจเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚, เดŽเดจเตเดจเดพเตฝ เดชเดฒ เดธเต†เตผเดตเดฑเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเตเด‚ เดตเดฐเตเดจเตเดจ เดฒเต‹เด—เตเด•เตพ เดตเดพเดฏเดฟเด•เตเด•เดพเดจเตเด‚ เด‡เดคเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚. เด…เดคเดพเดฏเดคเต, เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เด•เตเดฒเดฟเด•เตเด•เตเดนเต—เดธเดฟเตฝ เดจเดฟเดจเตเดจเต เด…เดต เดตเดพเดฏเดฟเด•เตเด•เตเด•!

*เดนเดฌเตเดฐ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเตเดฑเต† เดตเตเดฏเด•เตเดคเดฟเดชเดฐเดฎเดพเดฏ เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เด…เดจเตเดธเดฐเดฟเดšเตเดšเต เดจเดฟเด™เตเด™เดณเตเดŸเต† เดฑเต‹เด•เตเด•เต

เดฒเต‹เด—เตเดธเตเด•เตเดฒเดฟเดฏเต† เด•เดฃเตเดŸเตเดฎเตเดŸเตเดŸเตเด•

เดŽเดจเตเดฑเต† เด‡เดจเตเดฑเตผเดซเต‡เดธเดฟเดจเดพเดฏเดฟ เดžเดพเตป เด’เดฐเต เดชเต‡เดฐเต เด•เตŠเดฃเตเดŸเตเดตเดจเตเดจเดฟเดŸเตเดŸเดฟเดฒเตเดฒ, เดธเดคเตเดฏเดธเดจเตเดงเดฎเดพเดฏเดฟ เดชเดฑเดžเตเดžเดพเตฝ, เด‡เดคเต เด’เดฐเต เดชเตเดฐเต‹เดŸเตเดŸเต‹เดŸเตˆเดชเตเดชเดฟเดจเตเดฑเต† เดฐเต‚เดชเดคเตเดคเดฟเดฒเดพเดฃเต เดจเดฟเดฒเดจเดฟเตฝเด•เตเด•เตเดจเตเดจเดคเต, เดŽเดจเตเดจเดพเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด‰เดŸเดจเดŸเดฟ เดธเต‹เดดเตโ€Œเดธเต เด•เต‹เดกเต เด•เดพเดฃเดพเตป เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดธเตเดตเดพเด—เดคเด‚: https://github.com/YuriyNasretdinov/logscli (เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดค เด—เต‹ เด•เต‹เดกเดฟเดจเตเดฑเต† 350 เดตเดฐเดฟเด•เตพ).

เดธเดตเดฟเดถเต‡เดทเดคเด•เตพ

เดŸเต†เดฏเดฟเตฝ/เด—เตเดฐเต†เดชเตเดชเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดตเตผเด•เตเด•เต เดชเดฐเดฟเดšเดฟเดคเดฎเต†เดจเตเดจเต เดคเต‹เดจเตเดจเตเดจเตเดจ เด’เดฐเต เด‡เดจเตเดฑเตผเดซเต‡เดธเต เด‰เดฃเตเดŸเดพเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฏเดฟเดฐเตเดจเตเดจเต เดŽเดจเตเดฑเต† เดฒเด•เตเดทเตเดฏเด‚, เด…เดคเดพเดฏเดคเต, เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เด•เดพเดฐเตเดฏเด™เตเด™เตพ เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเด•:

  1. เดซเดฟเตฝเดŸเตเดŸเตผ เดšเต†เดฏเตเดฏเดพเดคเต† เดŽเดฒเตเดฒเดพ เดฒเต‹เด—เตเด•เดณเตเด‚ เด•เดพเดฃเตเด•.
  2. เด’เดฐเต เดจเดฟเดถเตเดšเดฟเดค เดธเดฌเตโ€ŒเดธเตเดŸเตเดฐเดฟเด‚เด—เต เด…เดŸเด™เตเด™เดฟเดฏ เดฒเตˆเดจเตเด•เตพ เดตเดฟเดŸเตเด• (เดซเตเดฒเดพเด—เต -F ัƒ grep).
  3. เดชเดคเดฟเดตเต เดŽเด•เตเดธเตเดชเตเดฐเดทเดจเตเดฎเดพเดฏเดฟ เดชเตŠเดฐเตเดคเตเดคเดชเตเดชเต†เดŸเตเดจเตเดจ เดตเดฐเดฟเด•เตพ เดตเดฟเดŸเตเด• (เดซเตเดฒเดพเด—เต -E ัƒ grep).
  4. เดกเดฟเดซเต‹เตพเดŸเตเดŸเดพเดฏเดฟ, เด•เดพเดฃเตเดจเตเดจเดคเต เดตเดฟเดชเดฐเต€เดค เด•เดพเดฒเด•เตเดฐเดฎเดคเตเดคเดฟเดฒเดพเดฃเต, เด•เดพเดฐเดฃเด‚ เดเดฑเตเดฑเดตเตเด‚ เดชเตเดคเดฟเดฏ เดฒเต‹เด—เตเด•เตพ เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ เด†เดฆเตเดฏเด‚ เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดณเตเดณเดคเดพเดฃเต.
  5. เด“เดฐเต‹ เดตเดฐเดฟเดฏเตเดŸเต†เดฏเตเด‚ เด…เดŸเตเดคเตเดคเดพเดฏเดฟ เดธเดจเตเดฆเตผเดญเด‚ เด•เดพเดฃเดฟเด•เตเด•เตเด• (เด“เดชเตเดทเดจเตเด•เตพ -A, -B ะธ -C ัƒ grep, เดฏเดฅเดพเด•เตเดฐเดฎเด‚ เด“เดฐเต‹ เดชเตŠเดฐเตเดคเตเดคเดชเตเดชเต†เดŸเตเดจเตเดจ เดฒเตˆเดจเดฟเดจเต เดฎเตเดฎเตเดชเตเด‚ เดถเต‡เดทเดตเตเด‚ เดšเตเดฑเตเดฑเตเด‚ N เดฒเตˆเดจเตเด•เตพ เด…เดšเตเดšเดŸเดฟเด•เตเด•เตเดจเตเดจเต).
  6. เดซเดฟเตฝเดŸเตเดŸเดฑเดฟเด‚เด—เต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต‹ เด…เดฒเตเดฒเดพเดคเต†เดฏเต‹ เด‡เตปเด•เดฎเดฟเด‚เด—เต เดฒเต‹เด—เตเด•เตพ เดคเดคเตเดธเดฎเดฏเด‚ เด•เดพเดฃเตเด• (เด…เดคเตเดฏเดพเดตเดถเตเดฏเดฎเดพเดฏเดฟ tail -f | grep).
  7. เด‡เดจเตเดฑเตผเดซเต‡เดธเต เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚ less, head, tail เดฎเดฑเตเดฑเตเดณเตเดณเดต - เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟเดฏเดพเดฏเดฟ, เด…เดตเดฏเตเดŸเต† เดŽเดฃเตเดฃเดคเตเดคเดฟเตฝ เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเด™เตเด™เดณเดฟเดฒเตเดฒเดพเดคเต† เดซเดฒเด™เตเด™เตพ เดจเตฝเด•เดฃเด‚; เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต เด…เดต เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เดพเตป เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดณเตเดณเดฟเดŸเดคเตเดคเต‹เดณเด‚ เดตเดฐเดฟเด•เตพ เด’เดฐเต เดธเตเดŸเตเดฐเต€เด‚ เด†เดฏเดฟ เด…เดšเตเดšเดŸเดฟเด•เตเด•เตเดจเตเดจเต; เดธเดฟเด—เตเดจเตฝ SIGPIPE เด…เดตเตผ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเตเดชเต‹เดฒเต† เดฒเต‹เด—เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เดฟเดจเต† เดจเดฟเดถเดฌเตเดฆเดฎเดพเดฏเดฟ เดคเดŸเดธเตเดธเดชเตเดชเต†เดŸเตเดคเตเดคเดฃเด‚ tail, grep เดฎเดฑเตเดฑเต UNIX เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟเด•เดณเตเด‚.

เดจเดŸเดชเตเดชเดพเด•เตเด•เตฝ

ClickHouse-เดฒเต‡เด•เตเด•เต เดฒเต‹เด—เตเด•เตพ เดŽเด™เตเด™เดจเต† เดจเตฝเด•เดฃเดฎเต†เดจเตเดจเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด‡เดคเดฟเดจเด•เด‚ เดŽเด™เตเด™เดจเต†เดฏเต†เด™เตเด•เดฟเดฒเตเด‚ เด…เดฑเดฟเดฏเดพเดฎเต†เดจเตเดจเต เดžเดพเตป เด…เดจเตเดฎเดพเดจเดฟเด•เตเด•เตเด‚. เด‡เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เด‡เดคเต เดชเดฐเต€เด•เตเดทเดฟเด•เตเด•เดพเตป เดžเดพเตป เดถเตเดชเดพเตผเดถ เดšเต†เดฏเตเดฏเตเดจเตเดจเต เดซเดฒเดตเตเดฎเดฟเดฒเตเดฒ ะธ เดชเต‚เดšเตเดšเด•เตเด•เตเดŸเตเดŸเดฟ, เด…เดคเตเดชเต‹เดฒเต† เดคเดจเตเดจเต† เดฒเต‹เด—เต เดกเต†เดฒเดฟเดตเดฑเดฟ เดธเด‚เดฌเดจเตเดงเดฟเดšเตเดš เดˆ เดฒเต‡เด–เดจเด‚.

เด†เดฆเตเดฏเด‚ เดจเดฟเด™เตเด™เตพ เด…เดŸเดฟเดธเตเดฅเดพเดจ เดธเตเด•เต€เด‚ เดคเต€เดฐเตเดฎเดพเดจเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เดจเดฟเด™เตเด™เตพ เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ เดธเดฎเดฏเดคเตเดคเดฟเดจเดจเตเดธเดฐเดฟเดšเตเดšเต เด…เดŸเตเด•เตเด•เดฟเดฏ เดฒเต‹เด—เตเด•เตพ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดพเตฝ, เด…เดต เด† เดฐเต€เดคเดฟเดฏเดฟเตฝ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เดฏเตเด•เตเดคเดฟเดธเดนเดฎเดพเดฃเต†เดจเตเดจเต เดคเต‹เดจเตเดจเตเดจเตเดจเต. เดจเดฟเดฐเดตเดงเดฟ เดฒเต‹เด—เต เดตเดฟเดญเดพเด—เด™เตเด™เตพ เด‰เดฃเตเดŸเต†เด™เตเด•เดฟเตฝ เด…เดตเดฏเต†เดฒเตเดฒเดพเด‚ เด’เดฐเต‡ เดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณเดคเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดชเตเดฐเดพเดฅเดฎเดฟเด• เด•เต€เดฏเตเดŸเต† เด†เดฆเตเดฏ เดจเดฟเดฐเดฏเดพเดฏเดฟ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดฒเต‹เด—เต เดตเดฟเดญเดพเด—เด‚ เด‰เดฃเตเดŸเดพเด•เตเด•เดพเด‚ - เด‡เดคเต เดชเดฒเดคเดฟเดจเตเดชเด•เดฐเด‚ เด’เดฐเต เดŸเต‡เดฌเดฟเตพ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเด‚, เด‡เดคเต เดŽเดชเตเดชเต‹เตพ เดตเดฒเดฟเดฏ เดชเตเดฒเดธเต เด†เดฏเดฟเดฐเดฟเด•เตเด•เตเด‚ ClickHouse-เดฒเต‡เด•เตเด•เต เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต (เดนเดพเตผเดกเต เดกเตเดฐเตˆเดตเตเด•เดณเตเดณเตเดณ เดธเต†เตผเดตเดฑเตเด•เดณเดฟเตฝ, เดธเต†เด•เตเด•เตปเดกเดฟเตฝ ~1 เดคเดตเดฃเดฏเดฟเตฝ เด•เต‚เดŸเตเดคเตฝ เดกเดพเดฑเตเดฑ เดšเต‡เตผเด•เตเด•เดพเตป เดถเตเดชเดพเตผเดถ เดšเต†เดฏเตเดฏเตเดจเตเดจเต เดฎเตเดดเตเดตเตป เดธเต†เตผเดตเดฑเดฟเดจเตเด‚).

เด…เดคเดพเดฏเดคเต, เดžเด™เตเด™เตพเด•เตเด•เต เดเด•เดฆเต‡เดถเด‚ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดชเดŸเตเดŸเดฟเด• เดธเตเด•เต€เด‚ เด†เดตเดถเตเดฏเดฎเดพเดฃเต:

CREATE TABLE logs(
    category LowCardinality(String), -- ะบะฐั‚ะตะณะพั€ะธั ะปะพะณะพะฒ (ะพะฟั†ะธะพะฝะฐะปัŒะฝะพ)
    time DateTime, -- ะฒั€ะตะผั ัะพะฑั‹ั‚ะธั
    millis UInt16, -- ะผะธะปะปะธัะตะบัƒะฝะดั‹ (ะผะพะณัƒั‚ ะฑั‹ั‚ัŒ ะธ ะผะธะบั€ะพัะตะบัƒะฝะดั‹, ะธ ั‚.ะด.): ั€ะตะบะพะผะตะฝะดัƒะตั‚ัั ั…ั€ะฐะฝะธั‚ัŒ, ะตัะปะธ ัะพะฑั‹ั‚ะธะน ะผะฝะพะณะพ, ั‡ั‚ะพะฑั‹ ะฑั‹ะปะพ ะปะตะณั‡ะต ั€ะฐะทะปะธั‡ะฐั‚ัŒ ัะพะฑั‹ั‚ะธั ะผะตะถะดัƒ ัะพะฑะพะน
    ..., -- ะฒะฐัˆะธ ัะพะฑัั‚ะฒะตะฝะฝั‹ะต ะฟะพะปั, ะฝะฐะฟั€ะธะผะตั€ ะธะผั ัะตั€ะฒะตั€ะฐ, ัƒั€ะพะฒะตะฝัŒ ะปะพะณะธั€ะพะฒะฐะฝะธั, ะธ ั‚ะฐะบ ะดะฐะปะตะต
    message String -- ั‚ะตะบัั‚ ัะพะพะฑั‰ะตะฝะธั
) ENGINE=MergeTree()
ORDER BY (category, time, millis)

เดจเดฟเตผเดญเดพเด—เตเดฏเดตเดถเดพเตฝ, เดŽเดจเดฟเด•เตเด•เต เดชเดฟเดŸเดฟเดšเตเดšเต†เดŸเตเด•เตเด•เดพเดจเตเด‚ เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เด•เดดเดฟเดฏเตเดจเตเดจ เดฑเดฟเดฏเดฒเดฟเดธเตเดฑเตเดฑเดฟเด•เต เดฒเต‹เด—เตเด•เดณเตเดณเตเดณ เด“เดชเตเดชเตบ เดธเต‹เดดเตโ€Œเดธเตเด•เดณเตŠเดจเตเดจเตเด‚ เดŽเดจเดฟเด•เตเด•เต เด‰เดŸเดจเดŸเดฟ เด•เดฃเตเดŸเต†เดคเตเดคเดพเตป เด•เดดเดฟเดžเตเดžเดฟเดฒเตเดฒ, เด…เดคเดฟเดจเดพเตฝ เดžเดพเตป เด‡เดคเตŠเดฐเต เด‰เดฆเดพเดนเดฐเดฃเดฎเดพเดฏเดฟ เดŽเดŸเตเดคเตเดคเต 2015-เดจเต เดฎเตเดฎเตเดชเต เด†เดฎเดธเต‹เดฃเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด‰เตฝเดชเตเดชเดจเตเดจเด™เตเด™เดณเตเดŸเต† เด…เดตเดฒเต‹เด•เดจเด™เตเด™เตพ. เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เด…เดตเดฏเตเดŸเต† เด˜เดŸเดจ เดŸเต†เด•เตเดธเตเดฑเตเดฑเต เดฒเต‹เด—เตเด•เดณเตเดŸเต‡เดคเดฟเดจเต เดธเดฎเดพเดจเดฎเดฒเตเดฒ, เดชเด•เตเดทเต‡ เดšเดฟเดคเตเดฐเต€เด•เดฐเดฃ เด†เดตเดถเตเดฏเด™เตเด™เตพเด•เตเด•เต เด‡เดคเต เดชเตเดฐเดงเดพเดจเดฎเดฒเตเดฒ.

ClickHouse-เดฒเต‡เด•เตเด•เต Amazon เด…เดตเดฒเต‹เด•เดจเด™เตเด™เตพ เด…เดชเตโ€Œเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เตพ

เดจเดฎเตเด•เตเด•เต เด’เดฐเต เดชเดŸเตเดŸเดฟเด• เด‰เดฃเตเดŸเดพเด•เตเด•เดพเด‚:

CREATE TABLE amazon(
   review_date Date,
   time DateTime DEFAULT toDateTime(toUInt32(review_date) * 86400 + rand() % 86400),
   millis UInt16 DEFAULT rand() % 1000,
   marketplace LowCardinality(String),
   customer_id Int64,
   review_id String,
   product_id LowCardinality(String),
   product_parent Int64,
   product_title String,
   product_category LowCardinality(String),
   star_rating UInt8,
   helpful_votes UInt32,
   total_votes UInt32,
   vine FixedString(1),
   verified_purchase FixedString(1),
   review_headline String,
   review_body String
)
ENGINE=MergeTree()
ORDER BY (time, millis)
SETTINGS index_granularity=8192

เด†เดฎเดธเต‹เตบ เดกเดพเดฑเตเดฑเดพเดธเต†เดฑเตเดฑเดฟเตฝ เด’เดฐเต เด…เดตเดฒเต‹เด•เดจเดคเตเดคเดฟเดจเต เด’เดฐเต เดคเต€เดฏเดคเดฟ เดฎเดพเดคเตเดฐเดฎเต‡ เด‰เดณเตเดณเต‚, เดชเด•เตเดทเต‡ เด•เตƒเดคเตเดฏเดฎเดพเดฏ เดธเดฎเดฏเดฎเดฟเดฒเตเดฒ, เด…เดคเดฟเดจเดพเตฝ เดจเดฎเตเด•เตเด•เต เดˆ เดกเดพเดฑเตเดฑ เด’เดฐเต เดฑเดพเตปเดกเตบ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดชเต‚เดฐเดฟเดชเตเดชเดฟเด•เตเด•เดพเด‚.

10 GB RAM-เดจเต เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดฒเตเดฒเดพเดคเตเดค เด’เดฐเต เดตเดฒเดฟเดฏ เดกเดพเดฑเตเดฑเดพ เดธเต†เดฑเตเดฑเต เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดจเดฟเด™เตเด™เตพ เดŽเดฒเตเดฒเดพ tsv เดซเดฏเดฒเตเด•เดณเตเด‚ เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เด†เดฆเตเดฏเดคเตเดคเต† ~20-16 เดตเดฐเต† เดชเดฐเดฟเดฎเดฟเดคเดชเตเดชเต†เดŸเตเดคเตเดคเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเดฟเดฒเตเดฒ. TSV เดซเดฏเดฒเตเด•เตพ เด…เดชเตโ€Œเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต เดžเดพเตป เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เด•เดฎเดพเตปเดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต:

for i in *.tsv; do
    echo $i;
    tail -n +2 $i | pv |
    clickhouse-client --input_format_allow_errors_ratio 0.5 --query='INSERT INTO amazon(marketplace,customer_id,review_id,product_id,product_parent,product_title,product_category,star_rating,helpful_votes,total_votes,vine,verified_purchase,review_headline,review_body,review_date) FORMAT TabSeparated'
done

1000 GB เดตเดฒเดฟเดชเตเดชเดฎเตเดณเตเดณ เด—เต‚เด—เดฟเตพ เด•เตเดฒเต—เดกเดฟเดฒเต† เด’เดฐเต เดธเดพเดงเดพเดฐเดฃ เดชเต†เตผเดธเดฟเดธเตเดฑเตเดฑเดจเตเดฑเต เดกเดฟเดธเตโ€Œเด•เดฟเตฝ (เด‡เดคเต เด’เดฐเต HDD เด†เดฃเต) (เดžเดพเตป เดˆ เดตเดฒเตเดชเตเดชเด‚ เดŽเดŸเตเดคเตเดคเดคเต เดชเตเดฐเดงเดพเดจเดฎเดพเดฏเตเด‚ เดธเตเดชเต€เดกเต เด…เตฝเดชเตเดชเด‚ เด•เต‚เดŸเตเดคเดฒเดพเดฏเดคเตเด•เตŠเดฃเตเดŸเดพเดฃเต, เด’เดฐเตเดชเด•เตเดทเต† เด†เดตเดถเตเดฏเดฎเดพเดฏ เดตเดฒเตเดชเตเดชเดคเตเดคเดฟเดฒเตเดณเตเดณ เด’เดฐเต SSD เดตเดฟเดฒเด•เตเดฑเดžเตเดžเดคเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเดฎเต†เด™เตเด•เดฟเดฒเตเด‚) เด…เดชเตโ€Œเดฒเต‹เดกเต เดตเต‡เด—เดค 75 เด•เต‹เดฑเตเด•เดณเดฟเตฝ เดเด•เดฆเต‡เดถเด‚ ~ 4 MB/sec เด†เดฏเดฟเดฐเตเดจเตเดจเต.

  • เดžเดพเตป Google-เตฝ เดœเต‹เดฒเดฟ เดšเต†เดฏเตเดฏเตเดจเตเดจ เด’เดฐเต เดฑเดฟเดธเตผเดตเต‡เดทเตป เดšเต†เดฏเตเดฏเดฃเด‚, เดชเด•เตเดทเต‡ เดžเดพเตป เด’เดฐเต เดธเตเดตเด•เดพเดฐเตเดฏ เด…เด•เตเด•เต—เดฃเตเดŸเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเดจเต เด•เดฎเตเดชเดจเดฟเดฏเดฟเดฒเต† เดŽเดจเตเดฑเต† เดœเต‹เดฒเดฟเดฏเตเดฎเดพเดฏเดฟ เดฏเดพเดคเตŠเดฐเต เดฌเดจเตเดงเดตเตเดฎเดฟเดฒเตเดฒ

เดˆ เดชเตเดฐเดคเตเดฏเต‡เด• เดกเดพเดฑเตเดฑเดพเดธเต†เดฑเตเดฑเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดžเดพเตป เดŽเดฒเตเดฒเดพ เดšเดฟเดคเตเดฐเต€เด•เดฐเดฃเด™เตเด™เดณเตเด‚ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเด‚, เด•เดพเดฐเดฃเด‚ เด‡เดคเต เดŽเดจเตเดฑเต† เด•เตˆเดฏเดฟเดฒเตเดฃเตเดŸเต.

เดกเดพเดฑเตเดฑ เดธเตเด•เดพเดจเดฟเด‚เด—เต เดชเตเดฐเต‹เด—เดคเดฟ เด•เดพเดฃเดฟเด•เตเด•เตเด•

ClickHouse-เตฝ เดžเด™เตเด™เตพ เดฒเต‹เด—เตเด•เดณเตเดณเตเดณ เด’เดฐเต เดŸเต‡เดฌเดฟเดณเดฟเตฝ เด’เดฐเต เดชเต‚เตผเดฃเตเดฃ เดธเตเด•เดพเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚, เด•เต‚เดŸเดพเดคเต† เดˆ เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเดจเต เด—เดฃเตเดฏเดฎเดพเดฏ เดธเดฎเดฏเดฎเต†เดŸเตเด•เตเด•เตเด•เดฏเตเด‚ เด•เตเดฑเดšเตเดšเต เดชเตŠเดฐเตเดคเตเดคเด™เตเด™เตพ เด•เดฃเตเดŸเต†เดคเตเดคเดฟเดฏเดพเตฝ เดฆเต€เตผเด˜เด•เดพเดฒเดคเตเดคเต‡เด•เตเด•เต เดซเดฒเด™เตเด™เดณเตŠเดจเตเดจเตเด‚ เดจเตฝเด•เดพเดคเดฟเดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเดพเตฝ, เด•เดพเดฃเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดจเตเดจเดคเต เด‰เดšเดฟเดคเดฎเดพเดฃเต. เดซเดฒเดคเตเดคเต‹เดŸเตเด•เต‚เดŸเดฟเดฏ เด†เดฆเตเดฏ เดตเดฐเดฟเด•เตพ เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเดคเตเดตเดฐเต† เด…เดจเตเดตเต‡เดทเดฃเดคเตเดคเดฟเดจเตเดฑเต† เดชเตเดฐเต‹เด—เดคเดฟ. เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, HTTP เดคเดฒเด•เตเด•เต†เดŸเตเดŸเตเด•เดณเดฟเตฝ เดชเตเดฐเต‹เด—เดคเดฟ เด…เดฏเดฏเตเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเตผ HTTP เด‡เดจเตเดฑเตผเดซเต‡เดธเดฟเตฝ เด‰เดฃเตเดŸเต: send_progress_in_http_headers=1. เดจเดฟเตผเดญเดพเด—เตเดฏเดตเดถเดพเตฝ, เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต Go เดฒเตˆเดฌเตเดฐเดฑเดฟเด•เตเด•เต เดคเดฒเด•เตเด•เต†เดŸเตเดŸเตเด•เตพ เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเดคเต เดชเต‹เดฒเต† เดตเดพเดฏเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒ, เดŽเดจเตเดจเดพเตฝ HTTP 1.0 เด‡เดจเตเดฑเตผเดซเต‡เดธเต (1.1 เดฎเดพเดฏเดฟ เดคเต†เดฑเตเดฑเดฟเดฆเตเดงเดฐเดฟเด•เตเด•เดฐเตเดคเต!) ClickHouse เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเต, เด…เดคเดฟเดจเดพเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต ClickHouse-เดฒเต‡เด•เตเด•เต เด’เดฐเต เดฑเต‹ TCP เด•เดฃเด•เตเดทเตป เดคเตเดฑเดจเตเดจเต เด…เดคเต เด…เดตเดฟเดŸเต† เด…เดฏเด•เตเด•เดพเด‚. GET /?query=... HTTP/1.0nn เด•เต‚เดŸเดพเดคเต† เดชเตเดฐเดคเดฟเด•เดฐเดฃ เดคเดฒเด•เตเด•เต†เดŸเตเดŸเตเด•เดณเตเด‚ เดฌเต‹เดกเดฟเดฏเตเด‚ เดฐเด•เตเดทเดชเตเดชเต†เดŸเตเด•เดฏเต‹ เดŽเตปเด•เตเดฐเดฟเดชเตเดทเดจเต‹ เด‡เดฒเตเดฒเดพเดคเต† เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเด•, เด…เดคเดฟเดจเดพเตฝ เดˆ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ เดžเด™เตเด™เตพ เดธเดพเดงเดพเดฐเดฃ เดฒเตˆเดฌเตเดฐเดฑเดฟ เดชเต‹เดฒเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดฟเดฒเตเดฒ.

ClickHouse-เตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เดฒเต‹เด—เตเด•เตพ

เดคเดพเดฐเดคเดฎเตเดฏเต‡เดจ เดตเดณเดฐเต†เด•เตเด•เดพเดฒเดฎเดพเดฏเดฟ (2019 เดฎเตเดคเตฝ?) เด“เตผเดกเตผ เดตเดดเดฟเดฏเตเดณเตเดณ เดšเต‹เดฆเตเดฏเด™เตเด™เตพเด•เตเด•เต เด•เตเดฒเดฟเด•เตเด•เตเดนเต—เดธเดฟเดจเต เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเตป เด‰เดฃเตเดŸเต, เด…เดคเดฟเดจเดพเตฝ เด’เดฐเต เดšเต‹เดฆเตเดฏเด‚

SELECT time, millis, message
FROM logs
WHERE message LIKE '%something%'
ORDER BY time DESC, millis DESC

เดธเตเด•เดพเตป เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเดจเตเดจเดคเตเดตเดฐเต† เด•เดพเดคเตเดคเดฟเดฐเดฟเด•เตเด•เดพเดคเต†, เดธเดจเตเดฆเต‡เดถเดคเตเดคเดฟเตฝ "เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚" เดŽเดจเตเดจ เดธเดฌเตโ€ŒเดธเตเดŸเตเดฐเดฟเด‚เด—เต เด‰เดณเตเดณ เดตเดฐเดฟเด•เตพ เด‡เดคเต เด‰เดŸเตป เดคเดจเตเดจเต† เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เดพเตป เดคเตเดŸเด™เตเด™เตเด‚.

เด•เต‚เดŸเดพเดคเต†, เด…เดคเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด•เดฃเด•เตเดทเตป เด…เดŸเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เด•เตเดฒเดฟเด•เตเด•เตเดนเต—เดธเต เดคเดจเตเดจเต† เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดฑเดฆเตเดฆเดพเด•เตเด•เดฟเดฏเดพเตฝ เด…เดคเต เดตเดณเดฐเต† เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚, เดŽเดจเตเดจเดพเตฝ เด‡เดคเต เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟ เดธเตเดตเดญเดพเดตเดฎเดฒเตเดฒ. เด“เดชเตเดทเตป เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดฏเดพเดจเตเดคเตเดฐเดฟเด• เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดฑเดฆเตเดฆเดพเด•เตเด•เตฝ เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเด•เตเด•เดพเด‚ cancel_http_readonly_queries_on_client_close=1.

Go-เดฏเดฟเตฝ SIGPIPE เดถเดฐเดฟเดฏเดพเดฏเดฟ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเด•

เดจเดฟเด™เตเด™เตพ เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดฏเตเดฎเตเดชเต‹เตพ, เดชเดฑเดฏเตเด•, เด•เดฎเดพเตปเดกเต some_cmd | head -n 10, เด•เตƒเดคเตเดฏเดฎเดพเดฏเดฟ เดŽเด™เตเด™เดจเต† เด•เดฎเดพเตปเดกเต some_cmd เดŽเดชเตเดชเต‹เตพ เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดทเตป เดจเดฟเตผเดคเตเดคเตเดจเตเดจเต head 10 เดตเดฐเดฟเด•เตพ เด•เตเดฑเดšเตเดšเต‹? เด‰เดคเตเดคเดฐเด‚ เดฒเดณเดฟเดคเดฎเดพเดฃเต: เดŽเดชเตเดชเต‹เตพ head เด…เดตเดธเดพเดจเดฟเด•เตเด•เตเดจเตเดจเต, เดชเตˆเดชเตเดชเต เด…เดŸเดฏเตเด•เตเด•เตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† some_cmd เด•เดฎเดพเตปเดกเดฟเดจเตเดฑเต† stdout, เดธเต‹เดชเดพเดงเดฟเด•เดฎเดพเดฏเดฟ, "เดŽเดตเดฟเดŸเต‡เดฏเตเด‚" เดชเต‹เดฏเดฟเดจเตเดฑเต เดšเต†เดฏเตเดฏเดพเตป เดคเตเดŸเด™เตเด™เตเดจเตเดจเต. เดŽเดชเตเดชเต‡เดพเตพ some_cmd เด…เดŸเดšเตเดš เดชเตˆเดชเตเดชเดฟเดฒเต‡เด•เตเด•เต เดŽเดดเตเดคเดพเตป เดถเตเดฐเดฎเดฟเด•เตเด•เตเดจเตเดจเต, เด‡เดคเดฟเดจเต เด’เดฐเต SIGPIPE เดธเดฟเด—เตเดจเตฝ เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเต, เด‡เดคเต เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟเดฏเดพเดฏเดฟ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเดจเต† เดจเดฟเดถเดฌเตเดฆเดฎเดพเดฏเดฟ เด…เดตเดธเดพเดจเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต.

Go-เดฏเดฟเตฝ เด‡เดคเตเด‚ เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟเดฏเดพเดฏเดฟ เดธเด‚เดญเดตเดฟเด•เตเด•เตเดจเตเดจเต, เดŽเดจเตเดจเดพเตฝ SIGPIPE เดธเดฟเด—เตเดจเตฝ เดนเดพเตปเดกเตโ€Œเดฒเดฑเตเด‚ เด…เดตเดธเดพเดจเด‚ "เดธเดฟเด—เตเดจเตฝ: SIGPIPE" เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดธเดฎเดพเดจเดฎเดพเดฏ เด’เดฐเต เดธเดจเตเดฆเต‡เดถเดตเตเด‚ เดชเตเดฐเดฟเดจเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต, เดˆ เดธเดจเตเดฆเต‡เดถเด‚ เดฎเดพเดฏเตโ€Œเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดจเดฎเตเดฎเตพ เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจ เดฐเต€เดคเดฟเดฏเดฟเตฝ SIGPIPE เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต, เด…เดคเดพเดฏเดคเต เดจเดฟเดถเดฌเตเดฆเดฎเดพเดฏเดฟ เดชเตเดฑเดคเตเดคเต:

ch := make(chan os.Signal)
signal.Notify(ch, syscall.SIGPIPE)
go func() {
    <-ch
    os.Exit(0)
}()

เดธเดจเตเดฆเต‡เดถ เดธเดจเตเดฆเตผเดญเด‚ เด•เดพเดฃเดฟเด•เตเด•เตเด•

เดšเดฟเดฒ เดชเดฟเดถเด•เตเด•เตพ เดธเด‚เดญเดตเดฟเดšเตเดš เดธเดจเตเดฆเตผเดญเด‚ (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดเดคเต เด…เดญเตเดฏเตผเดคเตเดฅเดจเดฏเดพเดฃเต เดชเดฐเดฟเดญเตเดฐเดพเดจเตเดคเดฟ เดธเตƒเดทเตเดŸเดฟเดšเตเดšเดคเต, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดคเด•เดฐเตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต เดŽเดจเตเดคเต เด…เดจเตเดฌเดจเตเดง เดชเตเดฐเดถเตเดจเด™เตเด™เตพ เดฆเตƒเดถเตเดฏเดฎเดพเดฏเดฟเดฐเตเดจเตเดจเต) grep เด‡เดคเต -A, -B, -C เด“เดชเตโ€Œเดทเดจเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดพเดฃเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต, เด‡เดคเต เดธเดจเตเดฆเต‡เดถเดคเตเดคเดฟเดจเต เดฏเดฅเดพเด•เตเดฐเดฎเด‚ เดฏเดฅเดพเด•เตเดฐเดฎเด‚ เดถเต‡เดทเดตเตเด‚ เดฎเตเดฎเตเดชเตเด‚ เดšเตเดฑเตเดฑเตเดฎเตเดณเตเดณ เดตเดฐเดฟเด•เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚ เด•เดพเดฃเดฟเด•เตเด•เตเดจเตเดจเต.

เดจเดฟเตผเดญเดพเด—เตเดฏเดตเดถเดพเตฝ, ClickHouse-เตฝ เด‡เดคเต เดšเต†เดฏเตเดฏเดพเดจเตเดณเตเดณ เดŽเดณเตเดชเตเดชเดตเดดเดฟ เดžเดพเตป เด•เดฃเตเดŸเต†เดคเตเดคเดฟเดฏเดฟเดฒเตเดฒ, เด…เดคเดฟเดจเดพเตฝ เดธเดจเตเดฆเตผเดญเด‚ เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดซเดฒเดคเตเดคเดฟเดจเตเดฑเต† เด“เดฐเต‹ เดตเดฐเดฟเดฏเดฟเดฒเต‡เด•เตเด•เตเด‚ เด‡เดคเตเดชเต‹เดฒเตเดณเตเดณ เด’เดฐเต เด…เดงเดฟเด• เด…เดญเตเดฏเตผเดคเตเดฅเดจ เด…เดฏเดฏเตโ€Œเด•เตเด•เตเดจเตเดจเต (เดตเดฟเดถเดฆเดพเด‚เดถเด™เตเด™เตพ เด…เดŸเตเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต†เดฏเตเด‚ เดธเดจเตเดฆเตผเดญเด‚ เดฎเตเดฎเตเดชเต เด•เดพเดฃเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต‹ เดŽเดจเตเดจเดคเดฟเดจเต† เด†เดถเตเดฐเดฏเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดถเต‡เดทเด‚):

SELECT time,millis,review_body FROM amazon
WHERE (time = 'ะ’ะ ะ•ะœะฏ_ะกะžะ‘ะซะขะ˜ะฏ' AND millis < ะœะ˜ะ›ะ›ะ˜ะกะ•ะšะฃะะ”ะซ_ะกะžะ‘ะซะขะ˜ะฏ) OR (time < 'ะ’ะ ะ•ะœะฏ_ะกะžะ‘ะซะขะ˜ะฏ')
ORDER BY time DESC, millis DESC
LIMIT ะšะžะ›ะ˜ะงะ•ะกะขะ’ะž_ะกะขะ ะžะš_ะšะžะะขะ•ะšะกะขะ
SETTINGS max_threads=1

ClickHouse เด…เดจเตเดฌเดจเตเดง เดฒเตˆเตป เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เดฟเดฏ เด‰เดŸเตป เดคเดจเตเดจเต† เด…เดญเตเดฏเตผเดคเตเดฅเดจ เด…เดฏเดฏเตโ€Œเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดพเตฝ, เด…เดคเต เด•เดพเดทเต†เดฏเดฟเตฝ เด…เดตเดธเดพเดจเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดชเตŠเดคเตเดตเต† เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดตเดณเดฐเต† เดตเต‡เด—เดคเตเดคเดฟเตฝ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเด•เดฏเตเด‚ เด•เตเดฑเดšเตเดšเต CPU เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต (เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดŽเดจเตเดฑเต† เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เดจเดฟเตฝ เดเด•เดฆเต‡เดถเด‚ ~6 ms เดŽเดŸเตเด•เตเด•เตเด‚).

เดชเตเดคเดฟเดฏ เดธเดจเตเดฆเต‡เดถเด™เตเด™เตพ เดคเดคเตเดธเดฎเดฏเด‚ เด•เดพเดฃเดฟเด•เตเด•เตเด•

เด‡เตปเด•เดฎเดฟเด‚เด—เต เดธเดจเตเดฆเต‡เดถเด™เตเด™เตพ (เดเดคเดพเดฃเตเดŸเต) เดคเดคเตเดธเดฎเดฏเด‚ เด•เดพเดฃเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดžเด™เตเด™เตพ เดฎเตเดฎเตเดชเต เดจเต‡เดฐเดฟเดŸเตเดŸ เด…เดตเดธเดพเดจ เดŸเตˆเด‚เดธเตเดฑเตเดฑเดพเดฎเตเดชเต เด“เตผเดคเตเดคเตเด•เตŠเดฃเตเดŸเต เด•เตเดฑเดšเตเดšเต เดธเต†เด•เตเด•เตปเดกเดฟเตฝ เด’เดฐเดฟเด•เตเด•เตฝ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต.

เด•เดฎเดพเตปเดกเต เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ

เดธเดพเดงเดพเดฐเดฃ logscli เด•เดฎเดพเตปเดกเตเด•เตพ เดชเตเดฐเดพเดฏเต‹เด—เดฟเด•เดฎเดพเดฏเดฟ เดŽเด™เตเด™เดจเต†เดฏเดฟเดฐเดฟเด•เตเด•เตเด‚?

เดฒเต‡เด–เดจเดคเตเดคเดฟเดจเตเดฑเต† เดคเตเดŸเด•เตเด•เดคเตเดคเดฟเตฝ เดžเดพเตป เดธเต‚เดšเดฟเดชเตเดชเดฟเดšเตเดš เด†เดฎเดธเต‹เตบ เดกเดพเดฑเตเดฑเดพเดธเต†เดฑเตเดฑเต เดจเดฟเด™เตเด™เตพ เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตโ€ŒเดคเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เด•เดฎเดพเตปเดกเตเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚:

# ะŸะพะบะฐะทะฐั‚ัŒ ัั‚ั€ะพะบะธ, ะณะดะต ะฒัั‚ั€ะตั‡ะฐะตั‚ัั ัะปะพะฒะพ walmart
$ logscli -F 'walmart' | less

# ะŸะพะบะฐะทะฐั‚ัŒ ัะฐะผั‹ะต ัะฒะตะถะธะต 10 ัั‚ั€ะพะบ, ะณะดะต ะฒัั‚ั€ะตั‡ะฐะตั‚ัั "terrible"
$ logscli -F terrible -limit 10

# ะขะพ ะถะต ัะฐะผะพะต ะฑะตะท -limit:
$ logscli -F terrible | head -n 10

# ะŸะพะบะฐะทะฐั‚ัŒ ะฒัะต ัั‚ั€ะพะบะธ, ะฟะพะดั…ะพะดัั‰ะธะต ะฟะพะด /times [0-9]/, ะฝะฐะฟะธัะฐะฝะฝั‹ะต ะดะปั vine ะธ ัƒ ะบะพั‚ะพั€ั‹ั… ะฒั‹ัะพะบะธะน ั€ะตะนั‚ะธะฝะณ
$ logscli -E 'times [0-9]' -where="vine='Y' AND star_rating>4" | less

# ะŸะพะบะฐะทะฐั‚ัŒ ะฒัะต ัั‚ั€ะพะบะธ ัะพ ัะปะพะฒะพะผ "panic" ะธ 3 ัั‚ั€ะพะบะธ ะบะพะฝั‚ะตะบัั‚ะฐ ะฒะพะบั€ัƒะณ
$ logscli -F 'panic' -C 3 | less

# ะะตะฟั€ะตั€ั‹ะฒะฝะพ ะฟะพะบะฐะทั‹ะฒะฐั‚ัŒ ะฝะพะฒั‹ะต ัั‚ั€ะพะบะธ ัะพ ัะปะพะฒะพะผ "5-star"
$ logscli -F '5-star' -tailf

เดฑเต†เดซเดฑเตปเดธเตเด•เตพ

เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟ เด•เต‹เดกเต (เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเตป เด‡เดฒเตเดฒเดพเดคเต†) github-เตฝ เดฒเดญเตเดฏเดฎเดพเดฃเต https://github.com/YuriyNasretdinov/logscli. ClickHouse เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟเดฏเตเดณเตเดณ เดฒเต‹เด—เตเด•เตพ เด•เดพเดฃเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด•เตบเดธเต‹เตพ เด‡เดจเตเดฑเตผเดซเต‡เดธเดฟเดจเดพเดฏเตเดณเตเดณ เดŽเดจเตเดฑเต† เด†เดถเดฏเดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดšเดฟเดจเตเดคเด•เตพ เด•เต‡เตพเด•เตเด•เตเดจเตเดจเดคเดฟเตฝ เดŽเดจเดฟเด•เตเด•เต เดธเดจเตเดคเต‹เดทเดฎเตเดฃเตเดŸเต.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•