KDB+λŠ” 벑터 기반의 μ–Έμ–΄λ₯Ό μ œκ³΅ν•˜λ©° 높은 μ„±λŠ₯을 μ œκ³΅ν•˜λŠ” μ‹œκ³„μ—΄ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό 쑰금 더 ν™œμš©ν•  수 μžˆλŠ” λ°©μ•ˆμ„ μ•Œμ•„λ³΄μž.

병렬 처리λ₯Ό μœ„ν•œ 보쑰 μŠ€λ ˆλ“œ

KDB+λŠ” 기본적으둜 μ‹±κΈ€ 코어와 μ‹±κΈ€ μŠ€λ ˆλ“œ 기반으둜 λ™μž‘ν•œλ‹€. 병렬 처리(Parallel Processing)λŠ” λ³„λ„μ˜ 보쑰 μŠ€λ ˆλ“œμ— μ˜ν•΄ μˆ˜ν–‰λœλ‹€. 보쑰 μŠ€λ ˆλ“œλŠ” KDB+ ν”„λ‘œμ„ΈμŠ€ μ‹€ν–‰ μ‹œ -s μ˜΅μ…˜μœΌλ‘œ μ§€μ •ν•˜λ©° 메인 μŠ€λ ˆλ“œμ™€ 보쑰 μŠ€λ ˆλ“œκ°„ 톡신은 IPC 직렬화λ₯Ό μˆ˜ν–‰ν•˜λ―€λ‘œ μ˜€λ²„ν—€λ“œκ°€ 큰 μž‘μ—…μ— ν•΄λ‹Ήλ˜λ―€λ‘œ μ‚¬μš©μ€‘μΈ μ½”μ–΄ μˆ˜μ— 따라 μ λ‹Ήν•œ 보쑰 μŠ€λ ˆλ“œλ₯Ό κ΅¬μ„±ν•΄μ•Όν•œλ‹€. λ˜ν•œ, ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ 보쑰 μŠ€λ ˆλ“œ 수λ₯Ό μ‘°μ •ν•  순 μžˆμ§€λ§Œ ν”„λ‘œμ„ΈμŠ€ μ‹€ν–‰ μ‹œ μ§€μ •ν•œ 보쑰 μŠ€λ ˆλ“œ 수λ₯Ό λ„˜μ„ 순 μ—†μŒμ— μ£Όμ˜ν•΄μ•Όν•œλ‹€.

q -p 5555 -s 12
  • Parallel Each – peach
  • Parallel on Cut – .Q.fc

λ‹€μˆ˜μ˜ νŒŒν‹°μ…˜μ„ μ‘°νšŒν•΄μ•Όν•˜λŠ” HDB ν”„λ‘œμ„ΈμŠ€λŠ” 보쑰 μŠ€λ ˆλ“œλ₯Ό 두어 μ‚¬μš©μž μ •μ˜ ν•¨μˆ˜μ—μ„œ 병렬 μ²˜λ¦¬κ°€ κ°€λŠ₯ν•˜λ„λ‘ κ³ λ €ν•˜μ„Έμš”.

νŒŒν‹°μ…˜ μˆ˜μ— λ”°λ₯Έ λ””μŠ€ν¬ μ„±λŠ₯ 이슈

κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ λ””μŠ€ν¬ I/O κ°€ μ€‘μš”ν•œ κ²ƒμ²˜λŸΌ KDB+ μ—μ„œλ„ 일정 μ‹œκ°„ λ²”μœ„μ— λŒ€ν•œ 데이터λ₯Ό μ‘°νšŒν•˜κΈ° μœ„ν•˜μ—¬ 확인해야할 νŒŒν‹°μ…˜μ˜ μˆ˜μ— 따라 λ””μŠ€ν¬ I/Oκ°€ μ€‘μš”ν•΄μ§„λ‹€. 예λ₯Ό λ“€μ–΄, 1μ‹œκ°„ λ‹¨μœ„λ‘œ μ €μž₯해놓은 νŒŒν‹°μ…˜μ˜ κ²½μš°μ— ν•œλ‹¬ λ²”μœ„μ— λŒ€ν•œ 톡계λ₯Ό μœ„ν•΄μ„œ μ‘°νšŒν•˜κ³ μž ν•œλ‹€λ©΄ μ•½ 720개의 νŒŒν‹°μ…˜ 폴더λ₯Ό μ‘°νšŒν•΄μ•Όν•˜κ³  KDB+ ν”„λ‘œμ„ΈμŠ€λŠ” ν•΄λ‹Ή 폴더 μ•‘μ„ΈμŠ€λ₯Ό μœ„ν•΄ λ””μŠ€ν¬ λ³Όλ₯¨μ— μ˜μ‘΄ν•  수 밖에 μ—†λ‹€. 이처럼 μ‹œκ³„μ—΄ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό ν™œμš©ν•œλ‹€κ³  해도 ν•˜λ£¨μ— μ €μž₯λ˜λŠ” 데이터 규λͺ¨μ— 따라 νŒŒν‹°μ…˜μ„ κ²°μ •ν•΄μ•Όν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€. KDB+ μ—μ„œλŠ” λ‹€μˆ˜μ˜ λ””μŠ€ν¬ λ³Όλ₯¨μ„ μ‚¬μš©ν•  수 μžˆλŠ” μ„Έκ·Έλ¨ΌνŠΈλ„ μ§€μ›ν•˜λŠ”λ° μ„œλ‘œ λ‹€λ₯Έ λ””μŠ€ν¬ λ³Όλ₯¨μ„ 톡해 병렬 μ•‘μ„ΈμŠ€λ₯Ό μˆ˜ν–‰ν•  수 μžˆλ‹€.

Partition data correctly: data for a particular date must reside in the partition for that date.

쑰회 λ²”μœ„ 별 μ†Œμš” μ‹œκ°„ 비ꡐ
κΈ°μ€€μ‘°νšŒ λ²”μœ„μ‹œκ°„λ³„ νŒŒν‹°μ…˜μΌμžλ³„ νŒŒν‹°μ…˜
μΌλ³„ν•œλ‹¬2.95s πŸŒ€30ms⭐️
μ£Όκ°„7일50ms40ms
μ›”κ°„1λ…„40.79s πŸ”₯83ms⭐️

InfluxDB λ˜λŠ” TimescaleDB μ—μ„œ Continuous aggregates κΈ°λŠ₯을 ν¬ν•¨ν•˜κ³  μžˆλŠ” μ΄μœ λ„ 규λͺ¨κ°€ 큰 데이터λ₯Ό λΉ λ₯΄κ²Œ μ‘°νšŒν•˜κΈ° μœ„ν•¨ μž…λ‹ˆλ‹€.

쑰회 μ„±λŠ₯을 ν–₯μƒμ‹œν‚¬ 수 μžˆλŠ” 속성

KDB+ μ—μ„œλŠ” Sorted, Unique, Grouped, Parted 와 같은 속성(Attribute)을 μ œκ³΅ν•˜μ—¬ 쿼리에 λŒ€ν•œ μ„±λŠ₯을 높일 수 μžˆλ‹€. κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μΈλ±μŠ€μ™€ 힌트라고 μ΄ν•΄ν•˜λ©΄ 될 것 κ°™λ‹€.

/ apply attributes
meter_with_attr: 0!update `s#id, `p#name, `g#timestamp from `name xasc select from meter
meta meter_with_attr

| c         | t f a |
| --------- | ----- |
| date      | d     |
| id        | s   s |
| name      | s   p |
| timestamp | p   g |
| val       | f     |

/ remove attributes
meter_with_attr:update `#id,`#name from meter_with_attr
meta meter_with_attr

| c         | t f a |
| --------- | ----- |
| date      | d     |
| id        | s     |
| name      | s     |
| timestamp | p   g |
| val       | f     |

νŒŒν‹°μ…˜μœΌλ‘œ μ €μž₯된 ν…Œμ΄λΈ”μ€ λͺ¨λ“  νŒŒν‹°μ…˜μ— 속성이 μ§€μ •λ˜μ–΄μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. dbmaint.setattrcol λ₯Ό μ°Έκ³ ν•˜μ„Έμš”.


벑터 DB에 λŒ€ν•œ 관심도가 λ†’μ•„μ§€λ©΄μ„œ KDB.AIλŠ” AIλ₯Ό μœ„ν•œ 벑터 λ°μ΄ν„°λ² μ΄μŠ€λ‘œ μ œκ³΅ν•˜λŠ”κ°€ λ΄…λ‹ˆλ‹€.