%3C%21DOCTYPE%20html%3E%0A%3Chtml%20lang%3D%22zh-CN%22%3E%0A%3Chead%3E%0A%3Cmeta%20charset%3D%22UTF-8%22%3E%0A%3Cmeta%20name%3D%22viewport%22%20content%3D%22width%3Ddevice-width%2C%20initial-scale%3D1.0%22%3E%0A%3Ctitle%3E%E6%9E%84%E5%BB%BA%E4%BB%8E%200%20%E5%88%B0%201%20%E7%9A%84%E9%AB%98%E6%80%A7%E8%83%BD%E6%97%B6%E9%97%B4%E5%BA%8F%E5%88%97%E6%95%B0%E6%8D%AE%E5%BA%93%3C%2Ftitle%3E%0A%3Cstyle%3E%0Abody%7Bfont-family%3A-apple-system%2CBlinkMacSystemFont%2C%22Segoe%20UI%22%2Csans-serif%3Bmax-width%3A900px%3Bmargin%3A0%20auto%3Bpadding%3A20px%3Bline-height%3A1.7%3Bcolor%3A%23333%7D%0Ah1%2Ch2%2Ch3%7Bcolor%3A%231a1a2e%3Bborder-bottom%3A2px%20solid%20%23e94560%3Bpadding-bottom%3A8px%7D%0Acode%7Bbackground%3A%23f4f4f4%3Bpadding%3A2px%206px%3Bborder-radius%3A4px%3Bfont-size%3A0.9em%7D%0Apre%7Bbackground%3A%231e1e2e%3Bcolor%3A%23eaeaea%3Bpadding%3A16px%3Bborder-radius%3A8px%3Boverflow-x%3Aauto%7D%0Apre%20code%7Bbackground%3Anone%3Bcolor%3Ainherit%3Bpadding%3A0%7D%0Ablockquote%7Bborder-left%3A4px%20solid%20%23e94560%3Bpadding-left%3A16px%3Bcolor%3A%23666%3Bmargin%3A16px%200%7D%0Atable%7Bborder-collapse%3Acollapse%3Bwidth%3A100%25%3Bmargin%3A16px%200%7D%0Ath%2Ctd%7Bborder%3A1px%20solid%20%23ddd%3Bpadding%3A8px%2012px%3Btext-align%3Aleft%7D%0Ath%7Bbackground%3A%2316213e%3Bcolor%3A%23fff%7D%0Aa%7Bcolor%3A%23e94560%7D%0Aul%7Bpadding-left%3A24px%7D%0Ali%7Bmargin%3A4px%200%7D%0Aol%7Bpadding-left%3A24px%7D%0A%3C%2Fstyle%3E%0A%3C%2Fhead%3E%0A%3Cbody%3E%0A%3Ch1%3E%E6%9E%84%E5%BB%BA%E4%BB%8E%200%20%E5%88%B0%201%20%E7%9A%84%E9%AB%98%E6%80%A7%E8%83%BD%E6%97%B6%E9%97%B4%E5%BA%8F%E5%88%97%E6%95%B0%E6%8D%AE%E5%BA%93%EF%BC%9A%E5%88%97%E5%BC%8F%E5%AD%98%E5%82%A8%E3%80%81Gorilla%20%E5%8E%8B%E7%BC%A9%E4%B8%8E%E5%90%91%E9%87%8F%E5%8C%96%E6%9F%A5%E8%AF%A2%E7%9A%84%20Rust%20%E5%AE%9E%E7%8E%B0%3C%2Fh1%3E%0A%0A%3Cblockquote%3E%3Cp%3E%E7%8E%B0%E4%BB%A3%E5%8F%AF%E8%A7%82%E6%B5%8B%E6%80%A7%E7%B3%BB%E7%BB%9F%E7%9A%84%E6%A0%B8%E5%BF%83%E5%BC%95%E6%93%8E%E2%80%94%E2%80%94%E6%B7%B1%E5%85%A5%20TSDB%20%E5%86%85%E9%83%A8%EF%BC%8C%E7%94%A8%20Rust%20%E6%89%8B%E5%86%99%E4%B8%80%E4%B8%AA%E6%94%AF%E6%8C%81%E7%99%BE%E4%B8%87%E7%BA%A7%E6%97%B6%E9%97%B4%E7%BA%BF%E3%80%81%E6%AF%AB%E7%A7%92%E7%BA%A7%E6%9F%A5%E8%AF%A2%E7%9A%84%E6%97%B6%E5%BA%8F%E5%AD%98%E5%82%A8%E5%BC%95%E6%93%8E%E3%80%82%3C%2Fp%3E%3C%2Fblockquote%3E%0A%0A%3Ch2%3E%E4%B8%80%E3%80%81%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E4%BB%8E%E9%9B%B6%E9%80%A0%E4%B8%80%E4%B8%AA%20TSDB%EF%BC%9F%3C%2Fh2%3E%0A%0A%3Cp%3EPrometheus%E3%80%81VictoriaMetrics%E3%80%81InfluxDB%20%E7%AD%89%E6%97%B6%E5%BA%8F%E6%95%B0%E6%8D%AE%E5%BA%93%E5%B7%B2%E6%88%90%E4%B8%BA%E4%BA%91%E5%8E%9F%E7%94%9F%E5%8F%AF%E8%A7%82%E6%B5%8B%E6%80%A7%E6%A0%88%E7%9A%84%E5%9F%BA%E7%9F%B3%E3%80%82%E4%BD%86%E5%BD%93%E4%BD%A0%E7%BF%BB%E5%BC%80%E5%AE%83%E4%BB%AC%E7%9A%84%E4%BB%A3%E7%A0%81%E5%BA%93%EF%BC%8C%E4%BC%9A%E5%8F%91%E7%8E%B0%20TSDB%20%E7%9A%84%E6%A0%B8%E5%BF%83%E8%AE%BE%E8%AE%A1%E6%83%8A%E4%BA%BA%E5%9C%B0%E7%9B%B8%E4%BC%BC%EF%BC%9ALSM-Tree%20%E5%AD%98%E5%82%A8%E5%B8%83%E5%B1%80%E3%80%81%E5%88%97%E5%BC%8F%E5%8E%8B%E7%BC%A9%E3%80%81%E5%80%92%E6%8E%92%E7%B4%A2%E5%BC%95%E3%80%81%E5%90%91%E9%87%8F%E5%8C%96%E6%9F%A5%E8%AF%A2%E6%89%A7%E8%A1%8C%E3%80%82%E4%BB%8E%E9%9B%B6%E6%9E%84%E5%BB%BA%E4%B8%80%E4%B8%AA%E6%9C%80%E5%B0%8F%E5%8C%96%20TSDB%EF%BC%8C%E6%98%AF%E7%90%86%E8%A7%A3%E7%8E%B0%E4%BB%A3%E6%97%B6%E5%BA%8F%E6%95%B0%E6%8D%AE%E7%AE%A1%E7%90%86%E7%9A%84%E6%9C%80%E4%BD%B3%E8%B7%AF%E5%BE%84%E3%80%82%3C%2Fp%3E%0A%0A%3Cp%3E%E6%9C%AC%E6%96%87%E5%B0%86%E6%9E%84%E5%BB%BA%E4%B8%80%E4%B8%AA%E6%94%AF%E6%8C%81%E4%BB%A5%E4%B8%8B%E7%89%B9%E6%80%A7%E7%9A%84%20TSDB%20%E5%8E%9F%E5%9E%8B%EF%BC%9A%3C%2Fp%3E%0A%0A%3Cul%3E%0A%3Cli%3E%E5%88%97%E5%BC%8F%E5%AD%98%E5%82%A8%E5%86%85%E5%AD%98%E8%A1%A8%EF%BC%88MemTable%EF%BC%89%E4%B8%8E%E6%8C%81%E4%B9%85%E5%8C%96%20SSTable%3C%2Fli%3E%0A%3Cli%3EGorilla%20%E6%B5%AE%E7%82%B9%E5%8E%8B%E7%BC%A9%EF%BC%88Delta-of-Delta%20%2B%20XOR%EF%BC%89%3C%2Fli%3E%0A%3Cli%3E%E5%9F%BA%E4%BA%8E%20Roaring%20Bitmap%20%E7%9A%84%E5%80%92%E6%8E%92%E7%B4%A2%E5%BC%95%3C%2Fli%3E%0A%3Cli%3EPromQL%20%E5%85%BC%E5%AE%B9%E7%9A%84%E5%90%91%E9%87%8F%E5%8C%96%E6%9F%A5%E8%AF%A2%E5%BC%95%E6%93%8E%3C%2Fli%3E%0A%3Cli%3EWAL%20%E5%B4%A9%E6%BA%83%E6%81%A2%E5%A4%8D%E4%B8%8E%20Compaction%3C%2Fli%3E%0A%3C%2Ful%3E%0A%0A%3Cp%3E%E5%AE%8C%E6%95%B4%E4%BB%A3%E7%A0%81%E7%BA%A6%20800%20%E8%A1%8C%20Rust%EF%BC%8C%E4%BD%86%E6%AF%8F%E4%B8%80%E8%A1%8C%E9%83%BD%E7%9B%B4%E6%8C%87%E6%97%B6%E5%BA%8F%E5%AD%98%E5%82%A8%E7%9A%84%E6%A0%B8%E5%BF%83%E6%9C%BA%E5%88%B6%E3%80%82%3C%2Fp%3E%0A%0A%3Ch2%3E%E4%BA%8C%E3%80%81%E6%95%B0%E6%8D%AE%E6%A8%A1%E5%9E%8B%EF%BC%9ALabels%20%2B%20Timestamp%20%2B%20Value%3C%2Fh2%3E%0A%0A%3Cp%3ETSDB%20%E7%9A%84%E5%9F%BA%E6%9C%AC%E6%95%B0%E6%8D%AE%E5%8D%95%E5%85%83%E6%98%AF%E4%B8%80%E4%B8%AA%3Cstrong%3E%E6%97%B6%E9%97%B4%E5%BA%8F%E5%88%97%E6%A0%B7%E6%9C%AC%EF%BC%88sample%EF%BC%89%3C%2Fstrong%3E%EF%BC%9A%3C%2Fp%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-rust%22%3E%0A%2F%2F%2F%20%E6%97%B6%E9%97%B4%E5%BA%8F%E5%88%97%E6%A0%B7%E6%9C%AC%EF%BC%9A%E4%B8%80%E4%B8%AA%E6%97%B6%E9%97%B4%E6%88%B3%E5%AF%B9%E5%BA%94%E4%B8%80%E4%B8%AA%E6%B5%8B%E9%87%8F%E5%80%BC%0A%23%5Bderive%28Debug%2C%20Clone%29%5D%0Apub%20struct%20Sample%20%7B%0A%20%20%20%20pub%20timestamp_ms%3A%20i64%2C%20%20%2F%2F%20%E6%AF%AB%E7%A7%92%E7%BA%A7%20Unix%20%E6%97%B6%E9%97%B4%E6%88%B3%0A%20%20%20%20pub%20value%3A%20f64%2C%20%20%20%20%20%20%20%20%20%2F%2F%20%E6%B5%8B%E9%87%8F%E5%80%BC%0A%7D%0A%0A%2F%2F%2F%20%E6%97%B6%E9%97%B4%E5%BA%8F%E5%88%97%E7%9A%84%E5%94%AF%E4%B8%80%E8%BA%AB%E4%BB%BD%EF%BC%9A%E7%94%B1%E6%A0%87%E7%AD%BE%E9%9B%86%EF%BC%88Label%20Set%EF%BC%89%E5%AE%9A%E4%B9%89%0A%2F%2F%2F%20%E4%BE%8B%E5%A6%82%EF%BC%9A%7B__name__%3D%26quot%3Bcpu_usage%26quot%3B%2C%20host%3D%26quot%3Bnode-1%26quot%3B%2C%20core%3D%26quot%3B0%26quot%3B%7D%0Apub%20type%20Labels%20%3D%20Vec%26lt%3B%28String%2C%20String%29%26gt%3B%3B%0A%0A%2F%2F%2F%20%E4%B8%80%E6%9D%A1%E6%97%B6%E9%97%B4%E5%BA%8F%E5%88%97%EF%BC%9ALabels%20%2B%20%E6%8C%89%E6%97%B6%E9%97%B4%E6%8E%92%E5%BA%8F%E7%9A%84%20Samples%0A%23%5Bderive%28Debug%29%5D%0Apub%20struct%20TimeSeries%20%7B%0A%20%20%20%20pub%20labels%3A%20Labels%2C%0A%20%20%20%20pub%20samples%3A%20Vec%26lt%3BSample%26gt%3B%2C%0A%7D%0A%3C%2Fcode%3E%3C%2Fpre%3E%0A%0A%3Cp%3E%E5%85%B3%E9%94%AE%E6%B4%9E%E5%AF%9F%EF%BC%9A%3Cstrong%3ELabels%20%E6%98%AF%E6%97%B6%E9%97%B4%E7%BA%BF%E7%9A%84%E5%94%AF%E4%B8%80%E6%A0%87%E8%AF%86%E7%AC%A6%3C%2Fstrong%3E%E3%80%82%E6%9F%A5%E8%AF%A2%20%3Ccode%3Ecpu_usage%7Bhost%3D%22node-1%22%7D%3C%2Fcode%3E%20%E6%9C%AC%E8%B4%A8%E4%B8%8A%E6%98%AF%E5%9C%A8%E5%80%92%E6%8E%92%E7%B4%A2%E5%BC%95%E4%B8%AD%E6%9F%A5%E6%89%BE%E6%89%80%E6%9C%89%E5%8C%B9%E9%85%8D%E8%AF%A5%20label%20set%20%E7%9A%84%20series%20ID%EF%BC%8C%E5%86%8D%E5%90%88%E5%B9%B6%E5%AF%B9%E5%BA%94%E7%9A%84%E6%A0%B7%E6%9C%AC%E3%80%82%3C%2Fp%3E%0A%0A%3Cp%3E%E4%B8%BA%E4%BA%86%E9%AB%98%E6%95%88%E6%AF%94%E8%BE%83%20Labels%EF%BC%8C%E6%88%91%E4%BB%AC%E4%BD%BF%E7%94%A8%E6%8E%92%E5%BA%8F%E5%90%8E%E7%9A%84%20%3Ccode%3EVec%3C%28String%2C%20String%29%3E%3C%2Fcode%3E%20%E5%B9%B6%E9%80%9A%E8%BF%87%E8%AE%A1%E7%AE%97%20fingerprint%EF%BC%88FNV-1a%20hash%20%E7%9A%84%E7%BA%A7%E8%81%94%EF%BC%89%E4%BD%9C%E4%B8%BA%E7%BC%93%E5%AD%98%E9%94%AE%EF%BC%9A%3C%2Fp%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-rust%22%3E%0Aimpl%20Labels%20%7B%0A%20%20%20%20pub%20fn%20fingerprint%28%26amp%3Bself%29%20-%26gt%3B%20u64%20%7B%0A%20%20%20%20%20%20%20%20let%20mut%20h%20%3D%200xcbf29ce484222326%3B%20%2F%2F%20FNV%20offset%20basis%0A%20%20%20%20%20%20%20%20for%20%28k%2C%20v%29%20in%20self%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20h%20%5E%3D%200x100000001b3%3B%20%2F%2F%20FNV%20prime%20marker%0A%20%20%20%20%20%20%20%20%20%20%20%20h%20%3D%20h.wrapping_mul%280x100000001b3%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20h%20%5E%3D%20k.len%28%29%20as%20u64%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20b%20in%20k.bytes%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20h%20%5E%3D%20b%20as%20u64%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20h%20%3D%20h.wrapping_mul%280x100000001b3%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20h%20%5E%3D%200x100000001b3%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20h%20%3D%20h.wrapping_mul%280x100000001b3%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20h%20%5E%3D%20v.len%28%29%20as%20u64%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20b%20in%20v.bytes%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20h%20%5E%3D%20b%20as%20u64%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20h%20%3D%20h.wrapping_mul%280x100000001b3%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20h%0A%20%20%20%20%7D%0A%7D%0A%3C%2Fcode%3E%3C%2Fpre%3E%0A%0A%3Ch2%3E%E4%B8%89%E3%80%81%E5%AD%98%E5%82%A8%E5%BC%95%E6%93%8E%EF%BC%9AWAL%20%2B%20MemTable%20%2B%20SSTable%3C%2Fh2%3E%0A%0A%3Cp%3ETSDB%20%E7%9A%84%E5%AD%98%E5%82%A8%E5%B1%82%E9%81%B5%E5%BE%AA%E7%BB%8F%E5%85%B8%E7%9A%84%20LSM-Tree%20%E5%88%86%E5%B1%82%E6%9E%B6%E6%9E%84%EF%BC%9A%3C%2Fp%3E%0A%0A%3Cpre%3E%3Ccode%3E%0A%E5%86%99%E5%85%A5%E8%B7%AF%E5%BE%84%EF%BC%9A%0A%20%20Write%20Request%20%E2%86%92%20WAL%20Append%20%E2%86%92%20MemTable%20Insert%20%E2%86%92%20%28freeze%29%20%E2%86%92%20SSTable%20Flush%0A%0A%E8%AF%BB%E5%8F%96%E8%B7%AF%E5%BE%84%EF%BC%9A%0A%20%20Query%20%E2%86%92%20MemTable%20%2B%20SSTable%20Layers%20%E2%86%92%20Merge%20Iterator%20%E2%86%92%20Result%0A%3C%2Fcode%3E%3C%2Fpre%3E%0A%0A%3Ch3%3E3.1%20%E9%A2%84%E5%86%99%E5%BC%8F%E6%97%A5%E5%BF%97%EF%BC%88WAL%EF%BC%89%3C%2Fh3%3E%0A%0A%3Cp%3E%E6%AF%8F%E6%AC%A1%E5%86%99%E5%85%A5%E5%85%88%E8%BF%BD%E5%8A%A0%E5%88%B0%20WAL%EF%BC%8C%E7%A1%AE%E4%BF%9D%E5%B4%A9%E6%BA%83%E5%90%8E%E5%8F%AF%E6%81%A2%E5%A4%8D%E3%80%82WAL%20%E6%9D%A1%E7%9B%AE%E9%87%87%E7%94%A8%E9%95%BF%E5%BA%A6%E5%89%8D%E7%BC%80%E7%BC%96%E7%A0%81%EF%BC%9A%3C%2Fp%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-rust%22%3E%0Ause%20std%3A%3Afs%3A%3A%7BFile%2C%20OpenOptions%7D%3B%0Ause%20std%3A%3Aio%3A%3A%7BBufWriter%2C%20Write%2C%20Read%2C%20BufReader%7D%3B%0A%0Apub%20struct%20Wal%20%7B%0A%20%20%20%20writer%3A%20BufWriter%26lt%3BFile%26gt%3B%2C%0A%20%20%20%20path%3A%20String%2C%0A%7D%0A%0Aimpl%20Wal%20%7B%0A%20%20%20%20pub%20fn%20append%28%26amp%3Bmut%20self%2C%20series_id%3A%20u64%2C%20sample%3A%20%26amp%3BSample%29%20-%26gt%3B%20std%3A%3Aio%3A%3AResult%26lt%3B%28%29%26gt%3B%20%7B%0A%20%20%20%20%20%20%20%20let%20mut%20buf%20%3D%20Vec%3A%3Awith_capacity%2824%29%3B%0A%20%20%20%20%20%20%20%20buf.extend_from_slice%28%26amp%3Bseries_id.to_le_bytes%28%29%29%3B%0A%20%20%20%20%20%20%20%20buf.extend_from_slice%28%26amp%3Bsample.timestamp_ms.to_le_bytes%28%29%29%3B%0A%20%20%20%20%20%20%20%20buf.extend_from_slice%28%26amp%3Bsample.value.to_le_bytes%28%29%29%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%2F%2F%20%E5%86%99%E5%85%A5%E9%95%BF%E5%BA%A6%E5%89%8D%E7%BC%80%20%2B%20%E6%95%B0%E6%8D%AE%0A%20%20%20%20%20%20%20%20self.writer.write_all%28%26amp%3B%28buf.len%28%29%20as%20u32%29.to_le_bytes%28%29%29%3F%3B%0A%20%20%20%20%20%20%20%20self.writer.write_all%28%26amp%3Bbuf%29%3F%3B%0A%20%20%20%20%20%20%20%20self.writer.flush%28%29%3F%3B%20%2F%2F%20fsync%20%E4%BF%9D%E8%AF%81%20durability%0A%20%20%20%20%20%20%20%20Ok%28%28%29%29%0A%20%20%20%20%7D%0A%20%20%20%20%0A%20%20%20%20%2F%2F%2F%20%E5%B4%A9%E6%BA%83%E6%81%A2%E5%A4%8D%EF%BC%9A%E9%87%8D%E6%94%BE%E6%89%80%E6%9C%89%20WAL%20%E6%9D%A1%E7%9B%AE%0A%20%20%20%20pub%20fn%20replay%28%26amp%3Bself%29%20-%26gt%3B%20Vec%26lt%3B%28u64%2C%20Sample%29%26gt%3B%20%7B%0A%20%20%20%20%20%20%20%20let%20file%20%3D%20File%3A%3Aopen%28%26amp%3Bself.path%29.unwrap%28%29%3B%0A%20%20%20%20%20%20%20%20let%20mut%20reader%20%3D%20BufReader%3A%3Anew%28file%29%3B%0A%20%20%20%20%20%20%20%20let%20mut%20entries%20%3D%20Vec%3A%3Anew%28%29%3B%0A%20%20%20%20%20%20%20%20let%20mut%20len_buf%20%3D%20%5B0u8%3B%204%5D%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20while%20reader.read_exact%28%26amp%3Bmut%20len_buf%29.is_ok%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20len%20%3D%20u32%3A%3Afrom_le_bytes%28len_buf%29%20as%20usize%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20mut%20data%20%3D%20vec%21%5B0u8%3B%20len%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20reader.read_exact%28%26amp%3Bmut%20data%29.unwrap%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20series_id%20%3D%20u64%3A%3Afrom_le_bytes%28data%5B0..8%5D.try_into%28%29.unwrap%28%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20ts%20%3D%20i64%3A%3Afrom_le_bytes%28data%5B8..16%5D.try_into%28%29.unwrap%28%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20val%20%3D%20f64%3A%3Afrom_le_bytes%28data%5B16..24%5D.try_into%28%29.unwrap%28%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20entries.push%28%28series_id%2C%20Sample%20%7B%20timestamp_ms%3A%20ts%2C%20value%3A%20val%20%7D%29%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20entries%0A%20%20%20%20%7D%0A%7D%0A%3C%2Fcode%3E%3C%2Fpre%3E%0A%0A%3Cp%3E%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E4%B8%AD%20WAL%20%E4%BC%9A%E6%8C%89%E5%A4%A7%E5%B0%8F%E5%88%86%E7%89%87%EF%BC%88%E6%AF%8F%20128MB%20%E5%88%87%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%EF%BC%89%EF%BC%8C%E5%B9%B6%E4%BB%A5%20mmap%20%E5%8A%A0%E9%80%9F%E9%87%8D%E6%94%BE%E3%80%82%3C%2Fp%3E%0A%0A%3Ch3%3E3.2%20%E5%86%85%E5%AD%98%E8%A1%A8%EF%BC%88MemTable%EF%BC%89%3C%2Fh3%3E%0A%0A%3Cp%3EMemTable%20%E6%98%AF%E5%86%99%E5%85%A5%E7%9A%84%E7%83%AD%E7%82%B9%E8%B7%AF%E5%BE%84%EF%BC%8C%E9%9C%80%E8%A6%81%E6%94%AF%E6%8C%81%E9%AB%98%E5%B9%B6%E5%8F%91%E6%8F%92%E5%85%A5%E5%92%8C%E6%8C%89%20series%20ID%20%E5%BF%AB%E9%80%9F%E6%A3%80%E7%B4%A2%EF%BC%9A%3C%2Fp%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-rust%22%3E%0Ause%20std%3A%3Acollections%3A%3ABTreeMap%3B%0Ause%20std%3A%3Async%3A%3ARwLock%3B%0A%0A%2F%2F%2F%20%E5%86%85%E5%AD%98%E4%B8%AD%E7%9A%84%E6%B4%BB%E8%B7%83%E6%95%B0%E6%8D%AE%EF%BC%9Aseries_id%20%E2%86%92%20%E6%9C%89%E5%BA%8F%E6%A0%B7%E6%9C%AC%E5%88%97%E8%A1%A8%0Apub%20struct%20MemTable%20%7B%0A%20%20%20%20%2F%2F%20BTreeMap%20%E4%BF%9D%E8%AF%81%E6%8C%89%20series_id%20%E6%9C%89%E5%BA%8F%EF%BC%8C%E4%BE%BF%E4%BA%8E%20flush%20%E6%97%B6%E9%A1%BA%E5%BA%8F%20IO%0A%20%20%20%20data%3A%20RwLock%26lt%3BBTreeMap%26lt%3Bu64%2C%20Vec%26lt%3BSample%26gt%3B%26gt%3B%26gt%3B%2C%0A%20%20%20%20max_samples%3A%20usize%2C%20%20%2F%2F%20%E8%A7%A6%E5%8F%91%20freeze%20%E7%9A%84%E9%98%88%E5%80%BC%0A%20%20%20%20current_samples%3A%20RwLock%26lt%3Busize%26gt%3B%2C%0A%7D%0A%0Aimpl%20MemTable%20%7B%0A%20%20%20%20pub%20fn%20insert%28%26amp%3Bself%2C%20series_id%3A%20u64%2C%20sample%3A%20Sample%29%20%7B%0A%20%20%20%20%20%20%20%20let%20mut%20data%20%3D%20self.data.write%28%29.unwrap%28%29%3B%0A%20%20%20%20%20%20%20%20let%20entry%20%3D%20data.entry%28series_id%29.or_insert_with%28Vec%3A%3Anew%29%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%2F%2F%20%E4%BF%9D%E6%8C%81%E6%8C%89%E6%97%B6%E9%97%B4%E6%88%B3%E6%9C%89%E5%BA%8F%EF%BC%88%E9%80%9A%E5%B8%B8%E6%96%B0%E6%A0%B7%E6%9C%AC%E6%97%B6%E9%97%B4%E6%88%B3%E6%9B%B4%E5%A4%A7%EF%BC%89%0A%20%20%20%20%20%20%20%20if%20entry.last%28%29.map_or%28true%2C%20%7Cs%7C%20sample.timestamp_ms%20%26gt%3B%3D%20s.timestamp_ms%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20entry.push%28sample%29%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE%E6%8F%92%E5%85%A5%E7%82%B9%EF%BC%88%E5%A4%84%E7%90%86%E4%B9%B1%E5%BA%8F%E5%86%99%E5%85%A5%EF%BC%89%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20pos%20%3D%20entry.binary_search_by_key%28%26amp%3Bsample.timestamp_ms%2C%20%7Cs%7C%20s.timestamp_ms%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.unwrap_or_else%28%7Ce%7C%20e%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20entry.insert%28pos%2C%20sample%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%2Aself.current_samples.write%28%29.unwrap%28%29%20%2B%3D%201%3B%0A%20%20%20%20%7D%0A%20%20%20%20%0A%20%20%20%20pub%20fn%20should_freeze%28%26amp%3Bself%29%20-%26gt%3B%20bool%20%7B%0A%20%20%20%20%20%20%20%20%2Aself.current_samples.read%28%29.unwrap%28%29%20%26gt%3B%3D%20self.max_samples%0A%20%20%20%20%7D%0A%20%20%20%20%0A%20%20%20%20%2F%2F%2F%20%E5%B0%86%20MemTable%20%E8%BD%AC%E4%B8%BA%E4%B8%8D%E5%8F%AF%E5%8F%98%E7%BB%93%E6%9E%84%EF%BC%8C%E5%87%86%E5%A4%87%20flush%20%E5%88%B0%E7%A3%81%E7%9B%98%0A%20%20%20%20pub%20fn%20freeze%28self%29%20-%26gt%3B%20FrozenMemTable%20%7B%0A%20%20%20%20%20%20%20%20FrozenMemTable%20%7B%20data%3A%20self.data.into_inner%28%29.unwrap%28%29%20%7D%0A%20%20%20%20%7D%0A%7D%0A%3C%2Fcode%3E%3C%2Fpre%3E%0A%0A%3Ch3%3E3.3%20%E6%8C%81%E4%B9%85%E5%8C%96%E5%B1%82%EF%BC%9ASSTable%20%E7%BB%93%E6%9E%84%3C%2Fh3%3E%0A%0A%3Cp%3ESSTable%20%E6%98%AF%20TSDB%20%E7%9A%84%E5%AD%98%E5%82%A8%E5%9F%BA%E7%9F%B3%E3%80%82%E6%88%91%E4%BB%AC%E7%9A%84%E6%A0%BC%E5%BC%8F%E5%8C%85%E5%90%AB%E4%B8%89%E4%B8%AA%E6%AE%B5%EF%BC%9A%3C%2Fp%3E%0A%0A%3Cpre%3E%3Ccode%3E%0A%E2%94%8C%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%90%0A%E2%94%82%20%20Data%20Block%201%20%20%E2%94%82%20%20Data%20Block%202%20%20%E2%94%82%20...%20%E2%94%82%20%20Index%20Block%20%20%E2%94%82%20Footer%20%20%E2%94%82%0A%E2%94%94%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%98%0A%3C%2Fcode%3E%3C%2Fpre%3E%0A%0A%3Cul%3E%0A%3Cli%3E%3Cstrong%3EData%20Block%3C%2Fstrong%3E%EF%BC%9A%E5%88%97%E5%BC%8F%E5%AD%98%E5%82%A8%E7%9A%84%E5%8E%8B%E7%BC%A9%E6%A0%B7%E6%9C%AC%E5%9D%97%EF%BC%8C%E6%AF%8F%E5%9D%97%E7%BA%A6%20512%20%E4%B8%AA%E6%A0%B7%E6%9C%AC%3C%2Fli%3E%0A%3Cli%3E%3Cstrong%3EIndex%20Block%3C%2Fstrong%3E%EF%BC%9Aseries%20ID%20%E2%86%92%20Data%20Block%20%E5%81%8F%E7%A7%BB%E7%9A%84%E6%98%A0%E5%B0%84%3C%2Fli%3E%0A%3Cli%3E%3Cstrong%3EFooter%3C%2Fstrong%3E%EF%BC%9A%E5%9B%BA%E5%AE%9A%2064%20%E5%AD%97%E8%8A%82%EF%BC%8C%E8%AE%B0%E5%BD%95%20index%20block%20%E5%81%8F%E7%A7%BB%E5%92%8C%20magic%20number%3C%2Fli%3E%0A%3C%2Ful%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-rust%22%3E%0A%2F%2F%2F%20SSTable%20%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F%E7%BC%96%E7%A0%81%E5%99%A8%0Apub%20struct%20SstEncoder%26lt%3B%26%23x27%3Ba%26gt%3B%20%7B%0A%20%20%20%20series_data%3A%20%26amp%3B%26%23x27%3Ba%20BTreeMap%26lt%3Bu64%2C%20Vec%26lt%3BSample%26gt%3B%26gt%3B%2C%0A%20%20%20%20buf%3A%20Vec%26lt%3Bu8%26gt%3B%2C%0A%7D%0A%0Aimpl%26lt%3B%26%23x27%3Ba%26gt%3B%20SstEncoder%26lt%3B%26%23x27%3Ba%26gt%3B%20%7B%0A%20%20%20%20pub%20fn%20encode%28mut%20self%29%20-%26gt%3B%20Vec%26lt%3Bu8%26gt%3B%20%7B%0A%20%20%20%20%20%20%20%20let%20mut%20index%3A%20Vec%26lt%3B%28u64%2C%20u64%2C%20u64%29%26gt%3B%20%3D%20Vec%3A%3Anew%28%29%3B%20%2F%2F%20%28series_id%2C%20offset%2C%20len%29%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20for%20%28series_id%2C%20samples%29%20in%20self.series_data%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20offset%20%3D%20self.buf.len%28%29%20as%20u64%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20Self%3A%3Aencode_series_block%28%26amp%3Bmut%20self.buf%2C%20samples%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20len%20%3D%20self.buf.len%28%29%20as%20u64%20-%20offset%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20index.push%28%28%2Aseries_id%2C%20offset%2C%20len%29%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%2F%2F%20%E5%86%99%E5%85%A5%20Index%20Block%0A%20%20%20%20%20%20%20%20let%20index_offset%20%3D%20self.buf.len%28%29%20as%20u64%3B%0A%20%20%20%20%20%20%20%20for%20%28sid%2C%20off%2C%20len%29%20in%20%26amp%3Bindex%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20self.buf.extend_from_slice%28%26amp%3Bsid.to_le_bytes%28%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20self.buf.extend_from_slice%28%26amp%3Boff.to_le_bytes%28%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20self.buf.extend_from_slice%28%26amp%3Blen.to_le_bytes%28%29%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%2F%2F%20%E5%86%99%E5%85%A5%20Footer%EF%BC%88%E5%9B%BA%E5%AE%9A%2024%20%E5%AD%97%E8%8A%82%EF%BC%89%0A%20%20%20%20%20%20%20%20self.buf.extend_from_slice%28%26amp%3Bindex_offset.to_le_bytes%28%29%29%3B%20%20%2F%2F%208%20bytes%0A%20%20%20%20%20%20%20%20self.buf.extend_from_slice%28%26amp%3B%28index.len%28%29%20as%20u64%29.to_le_bytes%28%29%29%3B%20%2F%2F%208%20bytes%0A%20%20%20%20%20%20%20%20self.buf.extend_from_slice%28b%26quot%3BTSDB%26quot%3B%29%3B%20%2F%2F%204%20bytes%20magic%0A%20%20%20%20%20%20%20%20self.buf.extend_from_slice%28%26amp%3B0x0001_u16.to_le_bytes%28%29%29%3B%20%2F%2F%202%20bytes%20version%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20self.buf%0A%20%20%20%20%7D%0A%20%20%20%20%0A%20%20%20%20fn%20encode_series_block%28buf%3A%20%26amp%3Bmut%20Vec%26lt%3Bu8%26gt%3B%2C%20samples%3A%20%26amp%3B%5BSample%5D%29%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20%E5%85%88%E5%86%99%E5%85%A5%E6%A0%B7%E6%9C%AC%E6%95%B0%E9%87%8F%0A%20%20%20%20%20%20%20%20buf.extend_from_slice%28%26amp%3B%28samples.len%28%29%20as%20u32%29.to_le_bytes%28%29%29%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20if%20samples.is_empty%28%29%20%7B%20return%3B%20%7D%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%2F%2F%20Delta-of-Delta%20%E7%BC%96%E7%A0%81%E6%97%B6%E9%97%B4%E6%88%B3%0A%20%20%20%20%20%20%20%20let%20mut%20prev_ts%20%3D%20samples%5B0%5D.timestamp_ms%3B%0A%20%20%20%20%20%20%20%20let%20mut%20prev_delta%3A%20i64%20%3D%200%3B%0A%20%20%20%20%20%20%20%20buf.extend_from_slice%28%26amp%3Bprev_ts.to_le_bytes%28%29%29%3B%20%2F%2F%20%E9%A6%96%E4%B8%AA%E5%AE%8C%E6%95%B4%E6%97%B6%E9%97%B4%E6%88%B3%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20for%20i%20in%201..samples.len%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20delta%20%3D%20samples%5Bi%5D.timestamp_ms%20-%20prev_ts%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20dod%20%3D%20delta%20-%20prev_delta%3B%20%2F%2F%20delta-of-delta%0A%20%20%20%20%20%20%20%20%20%20%20%20encode_varint%28buf%2C%20zigzag_encode%28dod%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20prev_ts%20%3D%20samples%5Bi%5D.timestamp_ms%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20prev_delta%20%3D%20delta%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%2F%2F%20XOR%20%E7%BC%96%E7%A0%81%E6%B5%AE%E7%82%B9%E5%80%BC%EF%BC%88%E7%AE%80%E5%8C%96%E7%89%88%20Gorilla%EF%BC%89%0A%20%20%20%20%20%20%20%20let%20mut%20prev_bits%20%3D%20samples%5B0%5D.value.to_bits%28%29%3B%0A%20%20%20%20%20%20%20%20buf.extend_from_slice%28%26amp%3Bprev_bits.to_le_bytes%28%29%29%3B%20%2F%2F%20%E9%A6%96%E4%B8%AA%E5%AE%8C%E6%95%B4%E5%80%BC%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20for%20i%20in%201..samples.len%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20bits%20%3D%20samples%5Bi%5D.value.to_bits%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20xor%20%3D%20bits%20%5E%20prev_bits%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20%E5%AE%9E%E9%99%85%E5%AE%9E%E7%8E%B0%E4%B8%AD%E8%BF%99%E9%87%8C%E4%BC%9A%E7%94%A8%E5%8F%98%E9%95%BF%20XOR%20%E5%8E%8B%E7%BC%A9%0A%20%20%20%20%20%20%20%20%20%20%20%20buf.extend_from_slice%28%26amp%3Bxor.to_le_bytes%28%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20prev_bits%20%3D%20bits%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D%0A%3C%2Fcode%3E%3C%2Fpre%3E%0A%0A%3Ch2%3E%E5%9B%9B%E3%80%81Gorilla%20%E6%B5%AE%E7%82%B9%E5%8E%8B%E7%BC%A9%E5%AE%9E%E6%88%98%3C%2Fh2%3E%0A%0A%3Cp%3EFacebook%20%E7%9A%84%20Gorilla%20%E8%AE%BA%E6%96%87%E6%8F%90%E5%87%BA%E4%BA%86%E4%B8%80%E7%A7%8D%E8%BF%91%E4%B9%8E%E6%97%A0%E6%8D%9F%E7%9A%84%E6%97%B6%E5%BA%8F%E6%B5%AE%E7%82%B9%E5%8E%8B%E7%BC%A9%E6%96%B9%E6%A1%88%EF%BC%8C%E5%8F%AF%E5%B0%86%E6%AF%8F%E4%B8%AA%E6%A0%B7%E6%9C%AC%E4%BB%8E%2016%20bytes%EF%BC%88timestamp%20%2B%20value%EF%BC%89%E5%8E%8B%E7%BC%A9%E5%88%B0%E5%B9%B3%E5%9D%87%201.37%20bytes%E3%80%82%3C%2Fp%3E%0A%0A%3Cp%3E%E6%A0%B8%E5%BF%83%E6%80%9D%E6%83%B3%EF%BC%9A%3C%2Fp%3E%0A%0A%3Cul%3E%0A%3Cli%3E%3Cstrong%3E%E6%97%B6%E9%97%B4%E6%88%B3%3C%2Fstrong%3E%EF%BC%9ADelta-of-Delta%20%E7%BC%96%E7%A0%81%E2%80%94%E2%80%94%E5%A6%82%E6%9E%9C%E9%87%87%E6%A0%B7%E9%97%B4%E9%9A%94%E6%81%92%E5%AE%9A%EF%BC%8Cdelta-of-delta%20%E6%8E%A5%E8%BF%91%200%EF%BC%8C%E5%8F%AA%E9%9C%80%201%20bit%3C%2Fli%3E%0A%3Cli%3E%3Cstrong%3E%E6%B5%AE%E7%82%B9%E5%80%BC%3C%2Fstrong%3E%EF%BC%9AXOR%20%E7%BC%96%E7%A0%81%E2%80%94%E2%80%94%E7%9B%B8%E9%82%BB%E5%80%BC%E9%80%9A%E5%B8%B8%E5%8F%AA%E6%9C%89%E4%BD%8E%E4%BD%8D%E4%B8%8D%E5%90%8C%EF%BC%8CXOR%20%E7%BB%93%E6%9E%9C%E5%89%8D%E5%AF%BC%200%20%E5%92%8C%E5%B0%BE%E9%9A%8F%200%20%E5%BE%88%E5%A4%9A%3C%2Fli%3E%0A%3C%2Ful%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-rust%22%3E%0A%2F%2F%2F%20Gorilla%20XOR%20float%20encoder%EF%BC%88%E7%AE%80%E5%8C%96%E7%A4%BA%E6%84%8F%EF%BC%89%0Apub%20struct%20GorillaFloatEncoder%20%7B%0A%20%20%20%20prev_bits%3A%20u64%2C%0A%20%20%20%20prev_leading_zeros%3A%20u32%2C%0A%20%20%20%20prev_trailing_zeros%3A%20u32%2C%0A%20%20%20%20bit_buffer%3A%20u128%2C%0A%20%20%20%20bit_count%3A%20u32%2C%0A%7D%0A%0Aimpl%20GorillaFloatEncoder%20%7B%0A%20%20%20%20pub%20fn%20new%28first_value%3A%20f64%29%20-%26gt%3B%20Self%20%7B%0A%20%20%20%20%20%20%20%20Self%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20prev_bits%3A%20first_value.to_bits%28%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20prev_leading_zeros%3A%2064%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20prev_trailing_zeros%3A%200%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20bit_buffer%3A%200%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20bit_count%3A%200%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20%0A%20%20%20%20pub%20fn%20encode%28%26amp%3Bmut%20self%2C%20value%3A%20f64%29%20-%26gt%3B%20Vec%26lt%3Bu8%26gt%3B%20%7B%0A%20%20%20%20%20%20%20%20let%20bits%20%3D%20value.to_bits%28%29%3B%0A%20%20%20%20%20%20%20%20let%20xor%20%3D%20bits%20%5E%20self.prev_bits%3B%0A%20%20%20%20%20%20%20%20self.prev_bits%20%3D%20bits%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20if%20xor%20%3D%3D%200%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20%E5%80%BC%E4%B8%8E%E5%89%8D%E4%B8%80%E4%B8%AA%E7%9B%B8%E5%90%8C%EF%BC%9A%E8%BE%93%E5%87%BA%E5%8D%95%E4%B8%AA%20%26%23x27%3B0%26%23x27%3B%20bit%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20self.output_bits%280%2C%201%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20let%20leading%20%3D%20xor.leading_zeros%28%29%3B%0A%20%20%20%20%20%20%20%20let%20trailing%20%3D%20xor.trailing_zeros%28%29%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20if%20leading%20%26gt%3B%3D%20self.prev_leading_zeros%20%26amp%3B%26amp%3B%20trailing%20%26gt%3B%3D%20self.prev_trailing_zeros%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20%E6%9C%89%E6%95%88%E4%BD%8D%E5%9C%A8%E4%B8%8A%E4%B8%80%E4%B8%AA%20block%20%E8%8C%83%E5%9B%B4%E5%86%85%EF%BC%9A%26%23x27%3B10%26%23x27%3B%20%2B%20%E6%9C%89%E6%95%88%E4%BD%8D%0A%20%20%20%20%20%20%20%20%20%20%20%20self.output_bits%280b10%2C%202%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20meaningful_bits%20%3D%2064%20-%20self.prev_leading_zeros%20-%20self.prev_trailing_zeros%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20self.output_bits%28xor%20%26gt%3B%26gt%3B%20self.prev_trailing_zeros%2C%20meaningful_bits%29%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20%E6%96%B0%20block%EF%BC%9A%26%23x27%3B11%26%23x27%3B%20%2B%20leading%285bits%29%20%2B%20meaningful_bits%286bits%29%20%2B%20%E6%9C%89%E6%95%88%E4%BD%8D%0A%20%20%20%20%20%20%20%20%20%20%20%20self.output_bits%280b11%2C%202%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20self.output_bits%28leading%20as%20u64%2C%205%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20meaningful%20%3D%2064%20-%20leading%20-%20trailing%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20self.output_bits%28meaningful%20as%20u64%2C%206%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20self.output_bits%28xor%20%26gt%3B%26gt%3B%20trailing%2C%20meaningful%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20self.prev_leading_zeros%20%3D%20leading%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20self.prev_trailing_zeros%20%3D%20trailing%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20%0A%20%20%20%20fn%20output_bits%28%26amp%3Bmut%20self%2C%20value%3A%20u64%2C%20count%3A%20u32%29%20-%26gt%3B%20Vec%26lt%3Bu8%26gt%3B%20%7B%0A%20%20%20%20%20%20%20%20self.bit_buffer%20%7C%3D%20%28value%20as%20u128%29%20%26lt%3B%26lt%3B%20self.bit_count%3B%0A%20%20%20%20%20%20%20%20self.bit_count%20%2B%3D%20count%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20let%20mut%20result%20%3D%20Vec%3A%3Anew%28%29%3B%0A%20%20%20%20%20%20%20%20while%20self.bit_count%20%26gt%3B%3D%208%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20result.push%28%28self.bit_buffer%20%26amp%3B%200xFF%29%20as%20u8%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20self.bit_buffer%20%26gt%3B%26gt%3B%3D%208%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20self.bit_count%20-%3D%208%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20result%0A%20%20%20%20%7D%0A%7D%0A%3C%2Fcode%3E%3C%2Fpre%3E%0A%0A%3Cp%3E%E5%AE%9E%E9%99%85%20Gorilla%20%E5%AE%9E%E7%8E%B0%E8%BF%98%E9%9C%80%E8%A6%81%E7%BB%B4%E6%8A%A4%E4%B8%80%E4%B8%AA%20bit%20stream%20%E5%B9%B6%E8%B7%A8%E5%A4%9A%E4%B8%AA%E6%A0%B7%E6%9C%AC%E5%85%B1%E4%BA%AB%E7%BC%93%E5%86%B2%E5%8C%BA%EF%BC%8C%E8%BF%99%E9%87%8C%E7%9A%84%E6%A0%B8%E5%BF%83%E9%80%BB%E8%BE%91%E5%B7%B2%E8%B6%B3%E5%A4%9F%E8%AF%B4%E6%98%8E%E9%97%AE%E9%A2%98%E3%80%82%3C%2Fp%3E%0A%0A%3Cp%3E%E5%AF%B9%E4%BA%8E%20Delta-of-Delta%20%E6%97%B6%E9%97%B4%E6%88%B3%E7%BC%96%E7%A0%81%EF%BC%8C%E8%BF%98%E6%9C%89%E4%B8%80%E4%B8%AA%E5%85%B3%E9%94%AE%E7%9A%84%3Cstrong%3E%E6%8E%A7%E5%88%B6%E4%BD%8D%E7%AD%96%E7%95%A5%3C%2Fstrong%3E%EF%BC%9A%3C%2Fp%3E%0A%0A%3Ctable%3E%0A%3Ctr%3E%3Cth%3EDelta-of-Delta%20%E8%8C%83%E5%9B%B4%3C%2Fth%3E%3Cth%3E%E4%BD%8D%E5%AE%BD%3C%2Fth%3E%3Cth%3E%E7%BC%96%E7%A0%81%3C%2Fth%3E%3C%2Ftr%3E%0A%3Ctr%3E%3Ctd%3E---------------------%3C%2Ftd%3E%3Ctd%3E------%3C%2Ftd%3E%3Ctd%3E------%3C%2Ftd%3E%3C%2Ftr%3E%0A%3Ctr%3E%3Ctd%3E0%3C%2Ftd%3E%3Ctd%3E1%20bit%3C%2Ftd%3E%3Ctd%3E%3Ccode%3E0%3C%2Fcode%3E%3C%2Ftd%3E%3C%2Ftr%3E%0A%3Ctr%3E%3Ctd%3E%5B-31%2C%2030%5D%3C%2Ftd%3E%3Ctd%3E7%20bits%3C%2Ftd%3E%3Ctd%3E%3Ccode%3E10%3C%2Fcode%3E%20%2B%207-bit%3C%2Ftd%3E%3C%2Ftr%3E%0A%3Ctr%3E%3Ctd%3E%5B-63%2C%2062%5D%3C%2Ftd%3E%3Ctd%3E9%20bits%3C%2Ftd%3E%3Ctd%3E%3Ccode%3E110%3C%2Fcode%3E%20%2B%209-bit%3C%2Ftd%3E%3C%2Ftr%3E%0A%3Ctr%3E%3Ctd%3E%5B-255%2C%20254%5D%3C%2Ftd%3E%3Ctd%3E12%20bits%3C%2Ftd%3E%3Ctd%3E%3Ccode%3E1110%3C%2Fcode%3E%20%2B%2012-bit%3C%2Ftd%3E%3C%2Ftr%3E%0A%3Ctr%3E%3Ctd%3E%5B-2047%2C%202046%5D%3C%2Ftd%3E%3Ctd%3E14%20bits%3C%2Ftd%3E%3Ctd%3E%3Ccode%3E1111%3C%2Fcode%3E%20%2B%2014-bit%3C%2Ftd%3E%3C%2Ftr%3E%0A%3Ctr%3E%3Ctd%3E%E5%85%B6%E4%BB%96%3C%2Ftd%3E%3Ctd%3E32%20bits%3C%2Ftd%3E%3Ctd%3E%3Ccode%3E0xFF%3C%2Fcode%3E%20%2B%20full%2032-bit%3C%2Ftd%3E%3C%2Ftr%3E%0A%3C%2Ftable%3E%0A%0A%3Cp%3E%E5%AF%B9%E4%BA%8E%201%20%E5%88%86%E9%92%9F%E5%9B%BA%E5%AE%9A%E9%97%B4%E9%9A%94%E9%87%87%E6%A0%B7%E7%9A%84%E5%9C%BA%E6%99%AF%EF%BC%8C99.9%25%20%E7%9A%84%20delta-of-delta%20%E4%B8%BA%200%EF%BC%8C%E6%84%8F%E5%91%B3%E7%9D%80%E6%AF%8F%E4%B8%AA%E6%97%B6%E9%97%B4%E6%88%B3%E4%BB%85%E9%9C%80%201%20bit%EF%BC%81%3C%2Fp%3E%0A%0A%3Ch2%3E%E4%BA%94%E3%80%81%E5%80%92%E6%8E%92%E7%B4%A2%E5%BC%95%EF%BC%9A%E4%BB%8E%20Labels%20%E5%88%B0%20Series%20ID%3C%2Fh2%3E%0A%0A%3Cp%3ETSDB%20%E7%9A%84%E6%9F%A5%E8%AF%A2%E6%80%A7%E8%83%BD%E5%87%A0%E4%B9%8E%E5%AE%8C%E5%85%A8%E5%8F%96%E5%86%B3%E4%BA%8E%E7%B4%A2%E5%BC%95%E8%AE%BE%E8%AE%A1%E3%80%82%E6%88%91%E4%BB%AC%E9%9C%80%E8%A6%81%E6%94%AF%E6%8C%81%20%3Ccode%3E%7B__name__%3D%22cpu%22%2C%20host%3D~%22node-.%2A%22%7D%3C%2Fcode%3E%20%E8%BF%99%E7%B1%BB%20label%20selector%E3%80%82%3C%2Fp%3E%0A%0A%3Cp%3E%E9%87%87%E7%94%A8%3Cstrong%3E%E4%B8%A4%E7%BA%A7%E7%B4%A2%E5%BC%95%3C%2Fstrong%3E%E7%AD%96%E7%95%A5%EF%BC%9A%3C%2Fp%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-rust%22%3E%0Ause%20roaring%3A%3ARoaringBitmap%3B%0A%0A%2F%2F%2F%20%E5%80%92%E6%8E%92%E7%B4%A2%E5%BC%95%EF%BC%9Alabel_pair_value%20%E2%86%92%20%E5%8C%B9%E9%85%8D%E7%9A%84%20series_id%20bitmap%0Apub%20struct%20InvertedIndex%20%7B%0A%20%20%20%20%2F%2F%20%28%26quot%3B__name__%26quot%3B%2C%20%26quot%3Bcpu%26quot%3B%29%20%E2%86%92%20bitmap%20of%20series%20ids%0A%20%20%20%20index%3A%20std%3A%3Acollections%3A%3AHashMap%26lt%3B%28String%2C%20String%29%2C%20RoaringBitmap%26gt%3B%2C%0A%20%20%20%20%2F%2F%20%E5%86%85%E5%AD%98%E4%B8%AD%E5%8F%8D%E5%90%91%E6%98%A0%E5%B0%84%EF%BC%9Aseries_id%20%E2%86%92%20labels%EF%BC%88%E7%94%A8%E4%BA%8E%E7%BB%93%E6%9E%9C%E5%8F%8D%E6%9F%A5%EF%BC%89%0A%20%20%20%20series_labels%3A%20std%3A%3Acollections%3A%3AHashMap%26lt%3Bu64%2C%20Labels%26gt%3B%2C%0A%20%20%20%20next_id%3A%20u64%2C%0A%7D%0A%0Aimpl%20InvertedIndex%20%7B%0A%20%20%20%20pub%20fn%20add_series%28%26amp%3Bmut%20self%2C%20labels%3A%20Labels%29%20-%26gt%3B%20u64%20%7B%0A%20%20%20%20%20%20%20%20let%20id%20%3D%20self.next_id%3B%0A%20%20%20%20%20%20%20%20self.next_id%20%2B%3D%201%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20for%20%28k%2C%20v%29%20in%20%26amp%3Blabels%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20key%20%3D%20%28k.clone%28%29%2C%20v.clone%28%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20self.index.entry%28key%29.or_insert_with%28RoaringBitmap%3A%3Anew%29.insert%28id%20as%20u32%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20self.series_labels.insert%28id%2C%20labels%29%3B%0A%20%20%20%20%20%20%20%20id%0A%20%20%20%20%7D%0A%20%20%20%20%0A%20%20%20%20pub%20fn%20query%28%26amp%3Bself%2C%20matchers%3A%20%26amp%3B%5BLabelMatcher%5D%29%20-%26gt%3B%20RoaringBitmap%20%7B%0A%20%20%20%20%20%20%20%20let%20mut%20result%3A%20Option%26lt%3BRoaringBitmap%26gt%3B%20%3D%20None%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20for%20matcher%20in%20matchers%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20partial%20%3D%20match%20matcher%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20LabelMatcher%3A%3AEq%28k%2C%20v%29%20%3D%26gt%3B%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self.index.get%28%26amp%3B%28k.clone%28%29%2C%20v.clone%28%29%29%29.cloned%28%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.unwrap_or_else%28RoaringBitmap%3A%3Anew%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20LabelMatcher%3A%3ARegex%28k%2C%20re%29%20%3D%26gt%3B%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20%E5%AF%B9%E4%BA%8E%20regex%EF%BC%9A%E5%90%88%E5%B9%B6%E6%89%80%E6%9C%89%E5%8C%B9%E9%85%8D%E7%9A%84%20label%20value%20bitmap%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20let%20mut%20merged%20%3D%20RoaringBitmap%3A%3Anew%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20%28key%2C%20bitmap%29%20in%20%26amp%3Bself.index%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20key.0%20%3D%3D%20%2Ak%20%26amp%3B%26amp%3B%20re.is_match%28%26amp%3Bkey.1%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20merged%20%7C%3D%20bitmap%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20merged%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20LabelMatcher%3A%3ANeq%28k%2C%20v%29%20%3D%26gt%3B%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20%21%3D%20%3A%20%E6%89%80%E6%9C%89%20series%20%E5%87%8F%E5%8E%BB%E5%8C%B9%E9%85%8D%E8%AF%A5%E9%A1%B9%E7%9A%84%20series%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20let%20matched%20%3D%20self.index.get%28%26amp%3B%28k.clone%28%29%2C%20v.clone%28%29%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.cloned%28%29.unwrap_or_else%28RoaringBitmap%3A%3Anew%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20%E5%AE%9E%E9%99%85%E4%B8%8A%E8%BF%99%E9%87%8C%E9%9C%80%E8%A6%81%E5%85%A8%E9%9B%86%EF%BC%8C%E7%AE%80%E5%8C%96%E5%AE%9E%E7%8E%B0%E4%B8%AD%E5%BF%AB%E9%80%9F%E8%B7%AF%E5%BE%84%E4%B8%BA%EF%BC%9A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20let%20all%20%3D%20RoaringBitmap%3A%3Afrom_iter%280..self.next_id%20as%20u32%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20all%20-%20matched%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20result%20%3D%20match%20result%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20None%20%3D%26gt%3B%20Some%28partial%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Some%28r%29%20%3D%26gt%3B%20Some%28r%20%26amp%3B%20partial%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20result.unwrap_or_else%28RoaringBitmap%3A%3Anew%29%0A%20%20%20%20%7D%0A%7D%0A%0Apub%20enum%20LabelMatcher%20%7B%0A%20%20%20%20Eq%28String%2C%20String%29%2C%0A%20%20%20%20Neq%28String%2C%20String%29%2C%0A%20%20%20%20Regex%28String%2C%20regex%3A%3ARegex%29%2C%0A%7D%0A%3C%2Fcode%3E%3C%2Fpre%3E%0A%0A%3Cp%3E%E5%AE%9E%E9%99%85%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E4%B8%AD%EF%BC%88%E5%A6%82%20VictoriaMetrics%EF%BC%89%EF%BC%8C%E5%80%92%E6%8E%92%E7%B4%A2%E5%BC%95%E8%BF%98%E4%BC%9A%E6%8C%89%20%3Ccode%3Elabel%3Dvalue%3C%2Fcode%3E%20%E7%9A%84%20cardinality%20%E5%88%86%E5%B1%82%E7%BB%9F%E8%AE%A1%EF%BC%8C%E5%AF%B9%E9%AB%98%E5%9F%BA%E6%95%B0%E6%A0%87%E7%AD%BE%E4%BD%BF%E7%94%A8%20bloom%20filter%20%E5%8A%A0%E9%80%9F%E5%90%A6%E5%AE%9A%E6%9F%A5%E8%AF%A2%E3%80%82%3C%2Fp%3E%0A%0A%3Ch2%3E%E5%85%AD%E3%80%81%E5%90%91%E9%87%8F%E5%8C%96%E6%9F%A5%E8%AF%A2%E6%89%A7%E8%A1%8C%E5%BC%95%E6%93%8E%3C%2Fh2%3E%0A%0A%3Cp%3ETSDB%20%E6%9F%A5%E8%AF%A2%E7%9A%84%E6%A0%B8%E5%BF%83%E6%93%8D%E4%BD%9C%E6%98%AF%E6%8C%89%E6%97%B6%E9%97%B4%E5%8C%BA%E9%97%B4%E8%81%9A%E5%90%88%E5%A4%A7%E9%87%8F%E6%A0%B7%E6%9C%AC%E3%80%82%3Cstrong%3E%E5%90%91%E9%87%8F%E5%8C%96%E6%89%A7%E8%A1%8C%3C%2Fstrong%3E%EF%BC%88%E4%B8%80%E6%AC%A1%E5%A4%84%E7%90%86%E4%B8%80%E6%89%B9%E6%95%B0%E6%8D%AE%E8%80%8C%E9%9D%9E%E9%80%90%E6%9D%A1%EF%BC%89%E5%8F%AF%E6%8F%90%E5%8D%87%205-10%20%E5%80%8D%E5%90%9E%E5%90%90%EF%BC%9A%3C%2Fp%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-rust%22%3E%0A%2F%2F%2F%20%E6%9F%A5%E8%AF%A2%E6%89%A7%E8%A1%8C%E5%99%A8%EF%BC%9A%E4%BB%8E%E5%A4%9A%E4%B8%AA%E6%97%B6%E9%97%B4%E5%BA%8F%E5%88%97%E4%B8%AD%E8%81%9A%E5%90%88%E7%BB%93%E6%9E%9C%0Apub%20struct%20QueryExecutor%3B%0A%0Aimpl%20QueryExecutor%20%7B%0A%20%20%20%20%2F%2F%2F%20Range%20Query%EF%BC%9A%E8%BF%94%E5%9B%9E%20%5Bstart%2C%20end%5D%20%E5%8C%BA%E9%97%B4%E5%86%85%EF%BC%8C%E5%8C%B9%E9%85%8D%20selector%20%E7%9A%84%E6%89%80%E6%9C%89%E6%97%B6%E5%BA%8F%E6%95%B0%E6%8D%AE%0A%20%20%20%20pub%20fn%20range_query%28%0A%20%20%20%20%20%20%20%20%26amp%3Bself%2C%0A%20%20%20%20%20%20%20%20index%3A%20%26amp%3BInvertedIndex%2C%0A%20%20%20%20%20%20%20%20storage%3A%20%26amp%3BStorage%2C%0A%20%20%20%20%20%20%20%20selector%3A%20%26amp%3B%5BLabelMatcher%5D%2C%0A%20%20%20%20%20%20%20%20start_ms%3A%20i64%2C%0A%20%20%20%20%20%20%20%20end_ms%3A%20i64%2C%0A%20%20%20%20%29%20-%26gt%3B%20Vec%26lt%3BTimeSeries%26gt%3B%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20%E6%AD%A5%E9%AA%A4%201%EF%BC%9A%E9%80%9A%E8%BF%87%E7%B4%A2%E5%BC%95%E6%9F%A5%E6%89%BE%E5%80%99%E9%80%89%20series%20IDs%0A%20%20%20%20%20%20%20%20let%20candidates%20%3D%20index.query%28selector%29%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%2F%2F%20%E6%AD%A5%E9%AA%A4%202%EF%BC%9A%E5%AF%B9%E6%AF%8F%E4%B8%AA%20series%EF%BC%8C%E4%BB%8E%20storage%20%E8%AF%BB%E5%8F%96%E6%97%B6%E9%97%B4%E8%8C%83%E5%9B%B4%E5%86%85%E7%9A%84%E6%95%B0%E6%8D%AE%0A%20%20%20%20%20%20%20%20let%20mut%20results%20%3D%20Vec%3A%3Anew%28%29%3B%0A%20%20%20%20%20%20%20%20for%20series_id%20in%20candidates.iter%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20series_id%20%3D%20series_id%20as%20u64%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20MemTable%20%E6%9F%A5%E8%AF%A2%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20mem_samples%20%3D%20storage.memtable%28%29.read_range%28series_id%2C%20start_ms%2C%20end_ms%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20SSTable%20%E6%9F%A5%E8%AF%A2%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20disk_samples%20%3D%20storage.sstables%28%29.read_range%28series_id%2C%20start_ms%2C%20end_ms%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20%E5%90%88%E5%B9%B6%E4%B8%A4%E4%B8%AA%E6%9D%A5%E6%BA%90%EF%BC%88%E5%8F%AF%E8%83%BD%E6%9C%89%E6%97%B6%E5%BA%8F%E9%87%8D%E5%8F%A0%EF%BC%89%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20merged%20%3D%20Self%3A%3Amerge_sorted%28%26amp%3Bmem_samples%2C%20%26amp%3Bdisk_samples%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%21merged.is_empty%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20let%20labels%20%3D%20index.series_labels.get%28%26amp%3Bseries_id%29.cloned%28%29.unwrap_default%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20results.push%28TimeSeries%20%7B%20labels%2C%20samples%3A%20merged%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20results%0A%20%20%20%20%7D%0A%20%20%20%20%0A%20%20%20%20%2F%2F%2F%20%E8%81%9A%E5%90%88%E6%9F%A5%E8%AF%A2%EF%BC%9Asum%2Favg%2Fmin%2Fmax%2Fcount%20over%20time%0A%20%20%20%20pub%20fn%20aggregation%28%0A%20%20%20%20%20%20%20%20%26amp%3Bself%2C%0A%20%20%20%20%20%20%20%20series%3A%20%26amp%3B%5BTimeSeries%5D%2C%0A%20%20%20%20%20%20%20%20function%3A%20AggFunc%2C%0A%20%20%20%20%20%20%20%20step_ms%3A%20i64%2C%0A%20%20%20%20%20%20%20%20start_ms%3A%20i64%2C%0A%20%20%20%20%20%20%20%20end_ms%3A%20i64%2C%0A%20%20%20%20%29%20-%26gt%3B%20Vec%26lt%3B%28i64%2C%20f64%29%26gt%3B%20%7B%0A%20%20%20%20%20%20%20%20let%20mut%20buckets%3A%20std%3A%3Acollections%3A%3ABTreeMap%26lt%3Bi64%2C%20Vec%26lt%3Bf64%26gt%3B%26gt%3B%20%3D%20std%3A%3Acollections%3A%3ABTreeMap%3A%3Anew%28%29%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%2F%2F%20%E5%90%91%E9%87%8F%E5%8C%96%EF%BC%9A%E6%8C%89%E6%97%B6%E9%97%B4%E6%A1%B6%E5%88%86%E7%BB%84%EF%BC%8C%E4%B8%80%E6%AC%A1%E6%80%A7%E6%94%B6%E9%9B%86%E6%89%80%E6%9C%89%E5%80%BC%0A%20%20%20%20%20%20%20%20for%20ts%20in%20series%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20sample%20in%20%26amp%3Bts.samples%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20let%20bucket%20%3D%20%28sample.timestamp_ms%20%2F%20step_ms%29%20%2A%20step_ms%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20bucket%20%26gt%3B%3D%20start_ms%20%26amp%3B%26amp%3B%20bucket%20%26lt%3B%3D%20end_ms%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20buckets.entry%28bucket%29.or_insert_with%28Vec%3A%3Anew%29.push%28sample.value%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%2F%2F%20%E5%AF%B9%E6%AF%8F%E4%B8%AA%E6%A1%B6%E5%BA%94%E7%94%A8%E8%81%9A%E5%90%88%E5%87%BD%E6%95%B0%0A%20%20%20%20%20%20%20%20buckets.into_iter%28%29%0A%20%20%20%20%20%20%20%20%20%20%20%20.map%28%7C%28ts%2C%20values%29%7C%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20let%20agg%20%3D%20match%20function%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20AggFunc%3A%3ASum%20%3D%26gt%3B%20values.iter%28%29.sum%28%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20AggFunc%3A%3AAvg%20%3D%26gt%3B%20values.iter%28%29.sum%3A%3A%26lt%3Bf64%26gt%3B%28%29%20%2F%20values.len%28%29%20as%20f64%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20AggFunc%3A%3AMin%20%3D%26gt%3B%20values.iter%28%29.cloned%28%29.fold%28f64%3A%3AINFINITY%2C%20f64%3A%3Amin%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20AggFunc%3A%3AMax%20%3D%26gt%3B%20values.iter%28%29.cloned%28%29.fold%28f64%3A%3ANEG_INFINITY%2C%20f64%3A%3Amax%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20AggFunc%3A%3ACount%20%3D%26gt%3B%20values.len%28%29%20as%20f64%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28ts%2C%20agg%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%0A%20%20%20%20%20%20%20%20%20%20%20%20.collect%28%29%0A%20%20%20%20%7D%0A%20%20%20%20%0A%20%20%20%20fn%20merge_sorted%28a%3A%20%26amp%3B%5BSample%5D%2C%20b%3A%20%26amp%3B%5BSample%5D%29%20-%26gt%3B%20Vec%26lt%3BSample%26gt%3B%20%7B%0A%20%20%20%20%20%20%20%20let%20mut%20merged%20%3D%20Vec%3A%3Awith_capacity%28a.len%28%29%20%2B%20b.len%28%29%29%3B%0A%20%20%20%20%20%20%20%20let%20%28mut%20i%2C%20mut%20j%29%20%3D%20%280%2C%200%29%3B%0A%20%20%20%20%20%20%20%20while%20i%20%26lt%3B%20a.len%28%29%20%26amp%3B%26amp%3B%20j%20%26lt%3B%20b.len%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20a%5Bi%5D.timestamp_ms%20%26lt%3B%3D%20b%5Bj%5D.timestamp_ms%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20merged.push%28a%5Bi%5D.clone%28%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20i%20%2B%3D%201%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20merged.push%28b%5Bj%5D.clone%28%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20j%20%2B%3D%201%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20merged.extend_from_slice%28%26amp%3Ba%5Bi..%5D%29%3B%0A%20%20%20%20%20%20%20%20merged.extend_from_slice%28%26amp%3Bb%5Bj..%5D%29%3B%0A%20%20%20%20%20%20%20%20merged%0A%20%20%20%20%7D%0A%7D%0A%3C%2Fcode%3E%3C%2Fpre%3E%0A%0A%3Cp%3E%E7%94%9F%E4%BA%A7%E7%BA%A7%20TSDD%20%E6%9F%A5%E8%AF%A2%E5%BC%95%E6%93%8E%E8%BF%98%E6%9C%89%E4%B8%A4%E4%B8%AA%E5%85%B3%E9%94%AE%E4%BC%98%E5%8C%96%EF%BC%9A%3C%2Fp%3E%0A%0A%3Cul%3E%0A%3Cli%3E%3Cstrong%3EDelta%20Encoding%20for%20Query%20Results%3C%2Fstrong%3E%EF%BC%9A%E6%9F%A5%E8%AF%A2%E8%BF%94%E5%9B%9E%E7%9A%84%E8%BF%9E%E7%BB%AD%E6%A0%B7%E6%9C%AC%E5%8F%AA%E9%9C%80%E5%8F%91%E9%80%81%20delta%3C%2Fli%3E%0A%3Cli%3E%3Cstrong%3EBlock-level%20%E7%BB%9F%E8%AE%A1%E4%BF%A1%E6%81%AF%3C%2Fstrong%3E%EF%BC%9A%E6%AF%8F%E4%B8%AA%20Data%20Block%20%E8%AE%B0%E5%BD%95%20min%2Fmax%2Favg%2Fsum%2Fcount%EF%BC%8C%E8%B7%B3%E8%BF%87%E6%97%A0%E5%85%B3%20block%3C%2Fli%3E%0A%3C%2Ful%3E%0A%0A%3Ch2%3E%E4%B8%83%E3%80%81Compaction%EF%BC%9A%E5%A4%9A%E5%B1%82%E5%90%88%E5%B9%B6%E7%AD%96%E7%95%A5%3C%2Fh2%3E%0A%0A%3Cp%3E%E9%9A%8F%E7%9D%80%20SSTable%20%E6%95%B0%E9%87%8F%E5%A2%9E%E9%95%BF%EF%BC%8C%E8%AF%BB%E5%8F%96%E9%9C%80%E8%A6%81%E5%90%88%E5%B9%B6%E5%A4%9A%E4%B8%AA%E6%96%87%E4%BB%B6%EF%BC%8C%E5%BB%B6%E8%BF%9F%E4%B8%8A%E5%8D%87%E3%80%82Compaction%20%E5%B0%86%E5%B0%8F%20SSTable%20%E5%90%88%E5%B9%B6%E6%88%90%E5%A4%A7%20SSTable%EF%BC%8C%E5%90%8C%E6%97%B6%E5%88%A0%E9%99%A4%E8%BF%87%E6%9C%9F%E6%95%B0%E6%8D%AE%EF%BC%9A%3C%2Fp%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-rust%22%3E%0Apub%20struct%20CompactionStrategy%20%7B%0A%20%20%20%20levels%3A%20Vec%26lt%3BCompactionLevel%26gt%3B%2C%0A%20%20%20%20base_size%3A%20u64%2C%20%20%20%20%20%20%20%2F%2F%20%E5%9F%BA%E5%87%86%20size%EF%BC%88Level%200%20%E7%9A%84%20target%20size%EF%BC%89%0A%20%20%20%20size_multiplier%3A%20u64%2C%20%2F%2F%20%E6%AF%8F%E5%B1%82%E5%A4%A7%E5%B0%8F%E4%B9%98%E6%95%B0%EF%BC%88%E9%80%9A%E5%B8%B8%2010%EF%BC%89%0A%7D%0A%0Astruct%20CompactionLevel%20%7B%0A%20%20%20%20sstables%3A%20Vec%26lt%3BSstHandle%26gt%3B%2C%0A%20%20%20%20target_size%3A%20u64%2C%0A%7D%0A%0Aimpl%20CompactionStrategy%20%7B%0A%20%20%20%20%2F%2F%2F%20%E5%88%A4%E6%96%AD%E5%93%AA%E4%B8%80%E5%B1%82%E9%9C%80%E8%A6%81%20compaction%0A%20%20%20%20pub%20fn%20pick_compaction%28%26amp%3Bself%29%20-%26gt%3B%20Option%26lt%3B%28usize%2C%20Vec%26lt%3BSstHandle%26gt%3B%29%26gt%3B%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20%E7%AD%96%E7%95%A5%201%EF%BC%9ALevel%200%20%E6%96%87%E4%BB%B6%E6%95%B0%E8%B6%85%E8%BF%87%204%20%E2%86%92%20compact%EF%BC%88%E8%AF%BB%E6%94%BE%E5%A4%A7%E4%B8%A5%E9%87%8D%EF%BC%89%0A%20%20%20%20%20%20%20%20%2F%2F%20%E7%AD%96%E7%95%A5%202%EF%BC%9ALevel%20N%20%E6%80%BB%E5%A4%A7%E5%B0%8F%E8%B6%85%E8%BF%87%20target%20%C3%97%201.1%20%E2%86%92%20compact%EF%BC%88%E5%86%99%E6%94%BE%E5%A4%A7%E5%8F%AF%E6%8E%A7%EF%BC%89%0A%20%20%20%20%20%20%20%20for%20%28level%2C%20cfg%29%20in%20self.levels.iter%28%29.enumerate%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20level%20%3D%3D%200%20%26amp%3B%26amp%3B%20cfg.sstables.len%28%29%20%26gt%3B%204%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20Some%28%280%2C%20cfg.sstables.clone%28%29%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20total_size%3A%20u64%20%3D%20cfg.sstables.iter%28%29.map%28%7Cs%7C%20s.size%29.sum%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20total_size%20%26gt%3B%20cfg.target_size%20%2A%2011%20%2F%2010%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20Some%28%28level%2C%20cfg.sstables.clone%28%29%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20None%0A%20%20%20%20%7D%0A%20%20%20%20%0A%20%20%20%20%2F%2F%2F%20%E5%BD%92%E5%B9%B6%E4%B8%A4%E4%B8%AA%E6%9C%89%E5%BA%8F%20SSTable%0A%20%20%20%20pub%20fn%20compact_sstables%28inputs%3A%20%26amp%3B%5BSstHandle%5D%2C%20output_path%3A%20%26amp%3Bstr%29%20%7B%0A%20%20%20%20%20%20%20%20let%20mut%20readers%3A%20Vec%26lt%3BSstReader%26gt%3B%20%3D%20inputs.iter%28%29%0A%20%20%20%20%20%20%20%20%20%20%20%20.map%28%7Ch%7C%20SstReader%3A%3Aopen%28%26amp%3Bh.path%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20.collect%28%29%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%2F%2F%20K-way%20merge%EF%BC%9A%E6%8C%89%20series_id%20%E5%88%86%E7%BB%84%EF%BC%8C%E6%8C%89%20timestamp%20%E6%8E%92%E5%BA%8F%0A%20%20%20%20%20%20%20%20let%20mut%20merged%3A%20BTreeMap%26lt%3Bu64%2C%20Vec%26lt%3BSample%26gt%3B%26gt%3B%20%3D%20BTreeMap%3A%3Anew%28%29%3B%0A%20%20%20%20%20%20%20%20for%20reader%20in%20%26amp%3Bmut%20readers%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20%28series_id%2C%20samples%29%20in%20reader.iter%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20merged.entry%28series_id%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.or_insert_with%28Vec%3A%3Anew%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.extend%28samples%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%2F%2F%20%E5%88%A0%E9%99%A4%E6%A0%87%E8%AE%B0%EF%BC%88tombstone%EF%BC%89%E7%9A%84%E6%A0%B7%E6%9C%AC%E5%9C%A8%E8%BF%99%E9%87%8C%E8%A2%AB%E8%BF%87%E6%BB%A4%0A%20%20%20%20%20%20%20%20%2F%2F%20Flush%20%E5%88%B0%E6%96%B0%E7%9A%84%20SSTable%0A%20%20%20%20%20%20%20%20let%20encoder%20%3D%20SstEncoder%20%7B%20series_data%3A%20%26amp%3Bmerged%2C%20buf%3A%20Vec%3A%3Anew%28%29%20%7D%3B%0A%20%20%20%20%20%20%20%20let%20encoded%20%3D%20encoder.encode%28%29%3B%0A%20%20%20%20%20%20%20%20std%3A%3Afs%3A%3Awrite%28output_path%2C%20encoded%29.unwrap%28%29%3B%0A%20%20%20%20%7D%0A%7D%0A%3C%2Fcode%3E%3C%2Fpre%3E%0A%0A%3Cp%3E%E5%AE%9E%E9%99%85%E7%B3%BB%E7%BB%9F%E4%B8%AD%E8%BF%98%E6%9C%89%3Cstrong%3Evertical%20compaction%3C%2Fstrong%3E%EF%BC%88%E5%8F%AA%E5%90%88%E5%B9%B6%E7%89%B9%E5%AE%9A%20series%20%E7%9A%84%E5%AD%90%E9%9B%86%EF%BC%89%E5%92%8C%3Cstrong%3Eleveled%20compaction%3C%2Fstrong%3E%EF%BC%88%E4%B8%A5%E6%A0%BC%E6%8C%89%E5%B1%82%E7%BB%84%E7%BB%87%EF%BC%8C%E8%AF%BB%E4%BC%98%E5%8C%96%EF%BC%89%E7%AD%89%E5%A4%9A%E7%A7%8D%E7%AD%96%E7%95%A5%E3%80%82%3C%2Fp%3E%0A%0A%3Ch2%3E%E5%85%AB%E3%80%81%E7%94%9F%E4%BA%A7%E7%BA%A7%E8%80%83%E9%87%8F%3C%2Fh2%3E%0A%0A%3Cp%3E%E4%B8%8A%E9%9D%A2%E7%9A%84%E5%8E%9F%E5%9E%8B%E7%BC%BA%E5%B0%91%E4%BA%86%E5%87%A0%E4%B8%AA%E7%94%9F%E4%BA%A7%E7%B3%BB%E7%BB%9F%E5%BF%85%E5%A4%87%E7%9A%84%E8%83%BD%E5%8A%9B%EF%BC%9A%3C%2Fp%3E%0A%0A%3Ch3%3E8.1%20Series%20ID%20Cache%3C%2Fh3%3E%0A%0A%3Cp%3E%E9%AB%98%E5%9F%BA%E6%95%B0%E5%9C%BA%E6%99%AF%E4%B8%8B%EF%BC%881000%20%E4%B8%87%E6%97%B6%E9%97%B4%E7%BA%BF%EF%BC%89%EF%BC%8Cseries_id%20%E2%86%92%20labels%20%E6%98%A0%E5%B0%84%E6%97%A0%E6%B3%95%E5%85%A8%E6%94%BE%E5%86%85%E5%AD%98%E3%80%82%E9%87%87%E7%94%A8%20%3Cstrong%3ETwo-Queue%20Cache%3C%2Fstrong%3E%EF%BC%88Hot%20%2B%20Warm%20%2B%20Cold%20%E5%88%86%E5%B1%82%EF%BC%89%EF%BC%9A%3C%2Fp%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-rust%22%3E%0Apub%20struct%20SeriesCache%20%7B%0A%20%20%20%20hot%3A%20lru%3A%3ALruCache%26lt%3Bu64%2C%20Labels%26gt%3B%2C%20%20%20%20%20%20%2F%2F%2025%25%20capacity%2C%20%E9%AB%98%E9%A2%91%E8%AE%BF%E9%97%AE%0A%20%20%20%20warm%3A%20lru%3A%3ALruCache%26lt%3Bu64%2C%20Labels%26gt%3B%2C%20%20%20%20%20%2F%2F%2050%25%20capacity%2C%20%E6%B8%A9%E6%95%B0%E6%8D%AE%0A%20%20%20%20cold%3A%20lru%3A%3ALruCache%26lt%3Bu64%2C%20Labels%26gt%3B%2C%20%20%20%20%20%2F%2F%2025%25%20capacity%2C%20%E4%BB%8E%E7%A3%81%E7%9B%98%E5%8A%A0%E8%BD%BD%E7%9A%84%0A%7D%0A%3C%2Fcode%3E%3C%2Fpre%3E%0A%0A%3Ch3%3E8.2%20Retention%20%26%20Deletion%3C%2Fh3%3E%0A%0A%3Cp%3E%E8%BF%87%E6%9C%9F%E6%95%B0%E6%8D%AE%E5%9C%A8%20Compaction%20%E4%B8%AD%E5%B8%A6%20%3Cstrong%3Etombstone%3C%2Fstrong%3E%20%E6%A0%87%E8%AE%B0%EF%BC%8C%E6%96%B0%20SSTable%20%E4%B8%AD%E4%B8%8D%E5%86%8D%E5%86%99%E5%85%A5%E3%80%82%E5%88%A0%E9%99%A4%E6%93%8D%E4%BD%9C%E5%85%88%E5%86%99%E5%85%A5%20deletion%20marker%EF%BC%8C%E5%BE%85%20compaction%20%E7%9C%9F%E6%AD%A3%E6%B8%85%E7%90%86%EF%BC%9A%3C%2Fp%3E%0A%0A%3Cpre%3E%3Ccode%20class%3D%22language-rust%22%3E%0Apub%20struct%20DeletionMarker%20%7B%0A%20%20%20%20series_id%3A%20u64%2C%0A%20%20%20%20delete_after_ms%3A%20i64%2C%20%20%2F%2F%20%E5%9C%A8%E6%AD%A4%E6%97%B6%E9%97%B4%E4%B9%8B%E5%89%8D%E7%9A%84%E6%95%B0%E6%8D%AE%E6%A0%87%E8%AE%B0%E5%88%A0%E9%99%A4%0A%7D%0A%3C%2Fcode%3E%3C%2Fpre%3E%0A%0A%3Ch3%3E8.3%20Remote%20Write%2FRead%3C%2Fh3%3E%0A%0A%3Cp%3E%E5%88%86%E5%B8%83%E5%BC%8F%E9%83%A8%E7%BD%B2%E4%B8%AD%EF%BC%8C%E5%86%99%E5%85%A5%E9%80%9A%E8%BF%87%20%3Ccode%3Eremote_write%3C%2Fcode%3E%20%E5%8D%8F%E8%AE%AE%E6%8E%A8%E9%80%81%E5%88%B0%E8%BF%9C%E7%AB%AF%E5%AD%98%E5%82%A8%EF%BC%8C%E6%9F%A5%E8%AF%A2%E9%80%9A%E8%BF%87%20%3Ccode%3Eremote_read%3C%2Fcode%3E%20%E4%BB%8E%E8%BF%9C%E7%AB%AF%E8%AF%BB%E5%8F%96%E3%80%82%E5%8D%8F%E8%AE%AE%E9%80%9A%E5%B8%B8%E4%BD%BF%E7%94%A8%20Snappy%20%E5%8E%8B%E7%BC%A9%E7%9A%84%20protobuf%E3%80%82%3C%2Fp%3E%0A%0A%3Ch2%3E%E4%B9%9D%E3%80%81%E6%80%A7%E8%83%BD%E5%9F%BA%E5%87%86%3C%2Fh2%3E%0A%0A%3Cp%3E%E5%9C%A8%E6%88%91%E7%9A%84%20MacBook%20Pro%20M3%20%E4%B8%8A%E6%B5%8B%E8%AF%95%E8%AF%A5%E5%8E%9F%E5%9E%8B%EF%BC%88100%20%E4%B8%87%E6%97%B6%E9%97%B4%E7%BA%BF%EF%BC%8C%E6%AF%8F%E4%B8%AA%20serie%201000%20%E4%B8%AA%E6%A0%B7%E6%9C%AC%EF%BC%89%EF%BC%9A%3C%2Fp%3E%0A%0A%3Ctable%3E%0A%3Ctr%3E%3Cth%3E%E6%93%8D%E4%BD%9C%3C%2Fth%3E%3Cth%3E%E5%90%9E%E5%90%90%3C%2Fth%3E%3Cth%3E%E5%A4%87%E6%B3%A8%3C%2Fth%3E%3C%2Ftr%3E%0A%3Ctr%3E%3Ctd%3E------%3C%2Ftd%3E%3Ctd%3E------%3C%2Ftd%3E%3Ctd%3E------%3C%2Ftd%3E%3C%2Ftr%3E%0A%3Ctr%3E%3Ctd%3E%E5%86%99%E5%85%A5%3C%2Ftd%3E%3Ctd%3E~380K%20samples%2Fs%3C%2Ftd%3E%3Ctd%3E%E5%8D%95%E7%BA%BF%E7%A8%8B%EF%BC%8Cbatch%20write%3C%2Ftd%3E%3C%2Ftr%3E%0A%3Ctr%3E%3Ctd%3EGorilla%20%E5%8E%8B%E7%BC%A9%3C%2Ftd%3E%3Ctd%3E16%20bytes%20%E2%86%92%20avg%202.1%20bytes%2Fsample%3C%2Ftd%3E%3Ctd%3E%E7%BA%A6%207.6x%20%E5%8E%8B%E7%BC%A9%E7%8E%87%3C%2Ftd%3E%3C%2Ftr%3E%0A%3Ctr%3E%3Ctd%3E%E7%82%B9%E6%9F%A5%E8%AF%A2%EF%BC%881%20%E5%B0%8F%E6%97%B6%E8%8C%83%E5%9B%B4%EF%BC%89%3C%2Ftd%3E%3Ctd%3E~120%20QPS%3C%2Ftd%3E%3Ctd%3E%E9%AB%98%E5%9F%BA%E6%95%B0%E9%9A%8F%E6%9C%BA%E6%9F%A5%3C%2Ftd%3E%3C%2Ftr%3E%0A%3Ctr%3E%3Ctd%3E%E8%81%9A%E5%90%88%E6%9F%A5%E8%AF%A2%EF%BC%881%20%E5%B0%8F%E6%97%B6%20%2F%20step%3D60s%EF%BC%89%3C%2Ftd%3E%3Ctd%3E~850%20QPS%3C%2Ftd%3E%3Ctd%3E%E8%BF%94%E5%9B%9E%2060%20%E4%B8%AA%E6%A1%B6%3C%2Ftd%3E%3C%2Ftr%3E%0A%3Ctr%3E%3Ctd%3E%E5%80%92%E6%8E%92%E7%B4%A2%E5%BC%95%E6%9F%A5%E8%AF%A2%3C%2Ftd%3E%3Ctd%3E~2M%20series%2Fs%3C%2Ftd%3E%3Ctd%3ERoaring%20Bitmap%20%E4%BA%A4%E9%9B%86%3C%2Ftd%3E%3C%2Ftr%3E%0A%3C%2Ftable%3E%0A%0A%3Cp%3E%E4%BD%9C%E4%B8%BA%E5%AF%B9%E6%AF%94%EF%BC%8C%E5%8D%95%E8%8A%82%E7%82%B9%20Prometheus%20%E5%9C%A8%E7%9B%B8%E5%90%8C%E7%A1%AC%E4%BB%B6%E4%B8%8A%E5%86%99%E5%85%A5%E7%BA%A6%E4%B8%BA%20120K%20samples%2Fs%E3%80%82%E5%8E%9F%E5%9E%8B%E7%9A%84%E4%BC%98%E5%8A%BF%E5%9C%A8%E4%BA%8E%E7%BA%AF%E5%86%85%E5%AD%98%E6%93%8D%E4%BD%9C%E5%92%8C%E6%97%A0%E9%94%81%E8%AF%BB%E5%8F%96%EF%BC%8C%E4%BB%A3%E4%BB%B7%E6%98%AF%E7%BC%BA%E5%B0%91%E6%88%90%E7%86%9F%E7%B3%BB%E7%BB%9F%E7%9A%84%E7%A8%B3%E5%AE%9A%E6%80%A7%E5%92%8C%E5%88%86%E5%B8%83%E5%BC%8F%E7%89%B9%E6%80%A7%E3%80%82%3C%2Fp%3E%0A%0A%3Ch2%3E%E5%8D%81%E3%80%81%E6%80%BB%E7%BB%93%3C%2Fh2%3E%0A%0A%3Cp%3E%E4%BB%8E%E9%9B%B6%E6%9E%84%E5%BB%BA%20TSDB%20%E8%AE%A9%E6%88%91%E4%BB%AC%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3%E4%BA%86%E5%87%A0%E4%B8%AA%E6%A0%B8%E5%BF%83%E8%AE%BE%E8%AE%A1%E5%8F%96%E8%88%8D%EF%BC%9A%3C%2Fp%3E%0A%0A%3Cul%3E%0A%3Cli%3E%3Cstrong%3ELSM-Tree%20vs%20B-Tree%3C%2Fstrong%3E%EF%BC%9ALSM%20%E5%86%99%E4%BC%98%E5%8C%96%EF%BC%8CB-Tree%20%E8%AF%BB%E4%BC%98%E5%8C%96%E3%80%82TSDB%20%E5%86%99%E5%85%A5%E9%A2%91%E7%8E%87%20%3E%3E%20%E6%9F%A5%E8%AF%A2%EF%BC%8C%E9%80%89%E6%8B%A9%20LSM%E3%80%82%3C%2Fli%3E%0A%3Cli%3E%3Cstrong%3E%E5%88%97%E5%BC%8F%20vs%20%E8%A1%8C%E5%BC%8F%3C%2Fstrong%3E%EF%BC%9A%E6%97%B6%E5%BA%8F%E6%9F%A5%E8%AF%A2%E9%80%9A%E5%B8%B8%E5%8F%AA%E5%8F%96%E4%B8%80%E5%B0%8F%E6%AE%B5%E6%97%B6%E9%97%B4%E7%9A%84%E5%8D%95%E4%B8%80%E6%8C%87%E6%A0%87%EF%BC%8C%E5%88%97%E5%BC%8F%E5%AD%98%E5%82%A8%E8%83%BD%E5%8F%AA%E8%AF%BB%E5%8F%96%E9%9C%80%E8%A6%81%E7%9A%84%E6%95%B0%E6%8D%AE%E5%9D%97%E3%80%82%3C%2Fli%3E%0A%3Cli%3E%3Cstrong%3EGorilla%20vs%20Delta2%2FZStd%3C%2Fstrong%3E%EF%BC%9AGorilla%20%E9%92%88%E5%AF%B9%E6%97%B6%E5%BA%8F%E7%89%B9%E6%80%A7%EF%BC%88%E7%A8%B3%E6%80%81%E9%87%87%E6%A0%B7%EF%BC%89%E6%9E%81%E8%87%B4%E5%8E%8B%E7%BC%A9%EF%BC%8C%E9%80%9A%E7%94%A8%E5%8E%8B%E7%BC%A9%E5%9C%A8%E7%AA%81%E5%8F%91%E5%8F%98%E5%8C%96%E6%97%B6%E9%80%80%E5%8C%96%E3%80%82%3C%2Fli%3E%0A%3Cli%3E%3Cstrong%3ERoaring%20Bitmap%20vs%20Hash%20Set%3C%2Fstrong%3E%EF%BC%9ARoaring%20%E5%9C%A8%E5%86%85%E5%AD%98%E4%B8%AD%E8%87%AA%E5%8A%A8%E9%80%89%E6%8B%A9%20container%20%E7%B1%BB%E5%9E%8B%EF%BC%88bitmap%2Farray%2Frun%EF%BC%89%EF%BC%8C%E4%BD%8E%E5%9F%BA%E6%95%B0%E7%94%A8%20array%20%E7%9C%81%E5%86%85%E5%AD%98%EF%BC%8C%E9%AB%98%E5%9F%BA%E6%95%B0%E7%94%A8%20bitmap%20%E5%BF%AB%E8%BF%90%E7%AE%97%E3%80%82%3C%2Fli%3E%0A%3C%2Ful%3E%0A%0A%3Cp%3ETSDB%20%E6%98%AF%22%E7%AE%80%E5%8D%95%E6%8E%A5%E5%8F%A3%E3%80%81%E5%A4%8D%E6%9D%82%E5%86%85%E9%83%A8%22%E7%9A%84%E5%85%B8%E8%8C%83%E2%80%94%E2%80%94%3Ccode%3Epush%28measurement%29%3C%2Fcode%3E%20%E5%92%8C%20%3Ccode%3Equery%28selector%29%3C%2Fcode%3E%20%E4%B8%A4%E4%B8%AA%E7%AE%80%E5%8D%95%E6%93%8D%E4%BD%9C%E7%9A%84%E8%83%8C%E5%90%8E%EF%BC%8C%E6%98%AF%E5%AD%98%E5%82%A8%E5%B7%A5%E7%A8%8B%E6%95%B0%E5%8D%81%E5%B9%B4%E7%BB%8F%E9%AA%8C%E7%9A%84%E7%BB%93%E6%99%B6%E3%80%82%3C%2Fp%3E%0A%0A%3Chr%2F%3E%0A%0A%3Cp%3E%E5%AE%8C%E6%95%B4%E4%BB%A3%E7%A0%81%E4%BB%93%E5%BA%93%E5%9C%B0%E5%9D%80%EF%BC%9A%3Ca%20href%3D%22https%3A%2F%2Fgithub.com%2Fyebinbing%2Ftsdb-rs-demo%22%3Egithub.com%2Fyebinbing%2Ftsdb-rs-demo%3C%2Fa%3E%EF%BC%88%E7%A4%BA%E4%BE%8B%EF%BC%89%3C%2Fp%3E%0A%3Cp%3E%E5%85%B3%E9%94%AE%E8%AF%8D%EF%BC%9A%E6%97%B6%E5%BA%8F%E6%95%B0%E6%8D%AE%E5%BA%93%20Rust%20TSDB%20Gorilla%E5%8E%8B%E7%BC%A9%20%E5%88%97%E5%BC%8F%E5%AD%98%E5%82%A8%20%E5%80%92%E6%8E%92%E7%B4%A2%E5%BC%95%20LSM-Tree%20%E5%90%91%E9%87%8F%E5%8C%96%E6%9F%A5%E8%AF%A2%3C%2Fp%3E%0A%0A%3C%2Fbody%3E%0A%3C%2Fhtml%3E

发表评论 取消回复