Rust-rocksdb: μ‹œμŠ€ν…œ RocksDB와 μ—°κ²°

에 λ§Œλ“  2019λ…„ 05μ›” 31일  Β·  22μ½”λ©˜νŠΈ  Β·  좜처: rust-rocksdb/rust-rocksdb

https://github.com/rust-rocksdb/rust-rocksdb/pull/166 은 이미 κ΅¬μΆ•λœ rockdb μΈμŠ€ν„΄μŠ€(예: μ‹œμŠ€ν…œ 전체에 μ„€μΉ˜λœ μΈμŠ€ν„΄μŠ€)와 μ—°κ²°ν•˜λŠ” κΈ°λŠ₯을 λ„μž…ν–ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 검색 경둜λ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ œκ³΅ν•΄μ•Ό ν•©λ‹ˆλ‹€( ROCKSDB_LIB_DIR , SNAPPY_LIB_DIR λ“±). rocksdb-sys κ°€ ν‘œμ€€ OS μœ„μΉ˜μ—μ„œλ„ rocksdb 및 snappy λ₯Ό μ‚¬μš©ν•  수 μžˆλŠ”μ§€ ν™•μΈν•˜λ©΄ 정말 깔끔할 κ²ƒμž…λ‹ˆλ‹€(μ›λž˜ https://github.com/rust- rockdb/rust-rocksdb/pull/166#issuecomment-389564525). μ΄λŸ¬ν•œ λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μ‹œμŠ€ν…œ 전체에 μ„€μΉ˜λ˜μ–΄ μžˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³  λΉŒλ“œν•  λ•Œλ§ˆλ‹€ μ‚¬μš©μž μ •μ˜ ν™˜κ²½ λ³€μˆ˜λ₯Ό 전달해야 ν•˜λŠ” 것은 μ•½κ°„ λΆˆν–‰ν•œ μΌμž…λ‹ˆλ‹€.

λ˜λŠ” ROCKSDB_USE_SYSTEM=1 λ§ŒμœΌλ‘œλ„ ν•œ 단계 더 올라갈 수 μžˆμŠ΅λ‹ˆλ‹€.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

이와 κ΄€λ ¨ν•˜μ—¬ μ΄λŸ¬ν•œ ν™˜κ²½ λ³€μˆ˜κ°€ README 및 λ¬Έμ„œμ— λ¬Έμ„œν™”λ˜μ–΄ 있으면 쒋을 κ²ƒμž…λ‹ˆλ‹€!

λͺ¨λ“  22 λŒ“κΈ€

이와 κ΄€λ ¨ν•˜μ—¬ μ΄λŸ¬ν•œ ν™˜κ²½ λ³€μˆ˜κ°€ README 및 λ¬Έμ„œμ— λ¬Έμ„œν™”λ˜μ–΄ 있으면 쒋을 κ²ƒμž…λ‹ˆλ‹€!

이것은 정말 μœ μš©ν•  κ²ƒμž…λ‹ˆλ‹€!

openssl-sys λŒ€ν•œ λΉŒλ“œ νŒŒμΌμ€ μ—¬κΈ°μ—μ„œ μ˜κ°μ„ 얻을 수 μžˆλŠ” 쒋은 μž₯μ†ŒμΌ 수 μžˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” 이것에 λ…Έλ ₯ν•˜κ³ μžˆλ‹€

@lovesegfault 진행 상황은 μ–΄λ–»μŠ΅λ‹ˆκΉŒ? rockdb λΉŒλ“œλŠ” ν˜„μž¬ λ‚΄ ν”„λ‘œμ νŠΈ λΉŒλ“œ μ‹œκ°„μ˜ κ°€μž₯ 큰 λΆ€λΆ„μž…λ‹ˆλ‹€ :cry:

μ§€κΈˆ μ‹œμŠ€ν…œ 라이브러리λ₯Ό μ‚¬μš©ν•˜λŠ”λ° μ–΄λ–€ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆκΉŒ? AFAIK, pkg-config λ˜λŠ” env λ³€μˆ˜λ₯Ό 톡해 잘 μž‘λ™ν•©λ‹ˆλ‹€.

@aleksuss κΈ€μŽ„, ν˜„μž¬ master μ—μ„œ librocksdb-sys λ₯Ό λΉŒλ“œν•˜λ €κ³  ν•˜λ©΄ μ‹œμŠ€ν…œ 전체 라이브러리둜 rockdbλ₯Ό μ„€μΉ˜ν–ˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³  μ—¬μ „νžˆ λ§Žμ€ C++ 컴파일러 μΈμŠ€ν„΄μŠ€λ₯Ό νšŒμ „μ‹œν‚΅λ‹ˆλ‹€.

$ ls /usr/lib/librocksdb.so*
/usr/lib/librocksdb.so  /usr/lib/librocksdb.so.6  /usr/lib/librocksdb.so.6.5.3

μ‚¬λ¬΄μ‹€μ—μ„œ λ‹€λ₯Έ 일을 μš°μ„ μ‹œν–ˆκΈ° λ•Œλ¬Έμ— λ‚˜λŠ” 이 일을 κ·Έλ§Œλ‘μ—ˆμŠ΅λ‹ˆλ‹€. μ•žμœΌλ‘œ 2주정도 νœ΄κ°€λ₯Ό κ°€λŠ”λ°, λ‹€μ‹œ λ°›μ•„λ³Ό 수 있기λ₯Ό :)

#354λŠ” 라이브러리 발견 λ§ˆλ²•μ„ μΆ”κ°€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„ RocksDBκ°€ pkg-config λ˜λŠ” 기타 μœ μ‚¬ν•œ 도ꡬλ₯Ό μ§€μ›ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

μ•žμœΌλ‘œλŠ” ν•΄λ‹Ή envvarκ°€ μ„€μ •λ˜μ§€ μ•Šμ€ 경우 일반적인 μœ„μΉ˜μ—μ„œ 라이브러리λ₯Ό μ°ΎλŠ” κ°„λ‹¨ν•œ μ ˆμ„ μ‰½κ²Œ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ•„, μ•Œκ² μŠ΅λ‹ˆλ‹€. ν¬λ ˆμ΄νŠΈκ°€ _ν˜„μž¬_ μ‹œμŠ€ν…œ μ „μ²΄μ˜ RocksDBλ₯Ό μ°ΎλŠ” 데 μ‹€νŒ¨ν•˜λ”λΌλ„ 계속 그럴 κ²ƒμž…λ‹ˆλ‹€. 무엇이 μ‹€νŒ¨ν•˜κ²Œ λ§Œλ“œλŠ”μ§€ κΆκΈˆν•©λ‹ˆλ‹€. 단지 ν˜Έν™˜λ˜λŠ” 버전이 μ•„λ‹ˆλΌ .so 의 λ™μΌν•œ 버전을 _μ •ν™•νžˆ_ μ°ΎλŠ” κ²ƒμΌκΉŒμš”?

κΈ€μŽ„, ν˜„μž¬ ν¬λ ˆμ΄νŠΈλŠ” μ‹œμŠ€ν…œ rockdb 및 곡급업체λ₯Ό 찾을 수 μ—†λŠ” 경우 찾으렀고 μ‹œλ„ν•©λ‹ˆλ‹€. #354λŠ” κΈ°λŠ₯을 톡해 곡급업체 μ—¬λΆ€λ₯Ό μ„ νƒν•œλ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€. 곡급업체가 μ•„λ‹Œ 경우 ROCKSDB_LIB_DIR μ„€μ •ν•΄μ•Ό ν•˜λ©° 그렇지 μ•ŠμœΌλ©΄ μœ μš©ν•œ 였λ₯˜ λ©”μ‹œμ§€λ₯Ό λ°›κ²Œ λ©λ‹ˆλ‹€.

envvarκ°€ μ„€μ •λ˜μ§€ μ•Šμ€ 경우 라이브러리λ₯Ό 찾으렀고 μ‹œλ„ν•˜λŠ” 후속 쑰치λ₯Ό μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ €λŠ” 일반적으둜 ν•΄λ‹Ή λ™μž‘μ˜ 팬이 μ•„λ‹™λ‹ˆλ‹€.

@lovesegfault λ‚΄κ°€ μ œλŒ€λ‘œ 읽고 μžˆλŠ”μ§€ ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆκΉŒ? κ·Έλž˜μ„œ, ν˜„μž¬ ROCKSDB_LIB_DIR κ°€ μ„€μ •λ˜μ–΄ μžˆμ§€ _μ•Šλ‹€λ©΄, 그러면 rockdb _will_ vendor? 그리고 μ‹œμŠ€ν…œ 전체 lib와 μ—°κ²°ν•˜λŠ” _μœ μΌν•œ_ 방법은 ROCKSDB_LIB_DIR .

κΆκΈˆν•©λ‹ˆλ‹€. 기본적으둜 μ‹œμŠ€ν…œ 라이브러리λ₯Ό μ‚¬μš©ν•˜λŠ” 것을 λ°˜λŒ€ν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ? κ³΅κΈ‰μ—…μ²΄λŠ” _κ±°λŒ€ν•œ_ 컴파일 μ‹œκ°„μ„ κ°€μ Έμ˜€λŠ”λ°, μž₯점이 무엇인지 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

@joonhoo
ν˜„μž¬ 행동
librocksdb-sys λŠ” ROCKSDB_LIB_DIR λ³€μˆ˜λ₯Ό μ°ΎμŠ΅λ‹ˆλ‹€. μ„€μ •λ˜μ–΄ 있으면 ν•΄λ‹Ή λ””λ ‰ν† λ¦¬μ˜ .so 에 μ—°κ²°λ©λ‹ˆλ‹€. μ„€μ •λ˜μ§€ μ•Šμ€ 경우 λŒ€μ•ˆμœΌλ‘œ rockdbλ₯Ό κ³΅κΈ‰ν•©λ‹ˆλ‹€. _exact_ 같은 λ™μž‘μ€ 같은 μ••μΆ• 라이브러리λ₯Ό λ°œμƒ bzip2 λ³€μˆ˜μ™€ κ±°κΈ° BZIP2_LIB_DIR , 예λ₯Ό λ“€λ©΄.

μƒˆλ‘œμš΄ 행동
librocksdb-sys μ—λŠ” μƒˆλ‘œμš΄(κΈ°λ³Έ) κΈ°λŠ₯ vendor μžˆμŠ΅λ‹ˆλ‹€. ν•΄λ‹Ή κΈ°λŠ₯이 ν™œμ„±ν™”λ˜λ©΄ μ–΄λ–€ λ°©μ‹μœΌλ‘œλ“  μ‹œμŠ€ν…œ 라이브러리λ₯Ό 찾으렀고 ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λŒ€μ‹  rocksdb 및 λͺ¨λ“  μ••μΆ• 라이브러리λ₯Ό κ³΅κΈ‰ν•©λ‹ˆλ‹€.

vendor κΈ°λŠ₯이 ν™œμ„±ν™” λ˜μ§€ μ•Šμ€ 경우 librocksdb-sys λŠ” μ–΄λ– ν•œ λ°©μ‹μœΌλ‘œλ„ rockdb 및 μ••μΆ• 라이브러리λ₯Ό ν¬ν•¨ν•œ 라이브러리λ₯Ό κ³΅κΈ‰ν•˜λ €κ³  μ‹œλ„ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λŒ€μ‹  ν•„μš”ν•œ 라이브러리λ₯Ό 찾을 μœ„μΉ˜λ₯Ό μ•Œλ €μ£ΌλŠ” ν™˜κ²½ λ³€μˆ˜λ₯Ό μ°ΎμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ ν™˜κ²½ λ³€μˆ˜λŠ” LIBNAME_LIB_DIR μž…λ‹ˆλ‹€. μ‹œμŠ€ν…œ 라이브러리 검색을 μ‹œλ„ν•˜μ§€ μ•Šκ³  μ‚¬μš©μž 지정에 μ˜μ‘΄ν•©λ‹ˆλ‹€. vendor λΉ„ν™œμ„±ν™”ν•˜κ³  ν•΄λ‹Ή ν™˜κ²½ λ³€μˆ˜λ₯Ό μ„€μ •ν•˜λŠ” 것을 잊으면 μ„€μ •ν•˜λΌλŠ” λ©”μ‹œμ§€μ™€ ν•¨κ»˜ λΉŒλ“œκ°€ μ‹€νŒ¨ν•©λ‹ˆλ‹€. ν™˜κ²½.

κ°€λŠ₯ν•œ 미래 행동
μ•žμœΌλ‘œ vendor κ°€ λΉ„ν™œμ„±ν™”λ˜λ©΄ ν™˜κ²½ λ³€μˆ˜κ°€ μ„€μ •λ˜μ§€ μ•Šμ€ 경우 폴백으둜 μ‹œμŠ€ν…œ 라이브러리 검색을 μ‹œλ„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 아직 κ΅¬ν˜„ν•˜μ§€λŠ” μ•Šμ•˜μ§€λ§Œ μ‹œκ°„μ΄ μžˆμ„ λ•Œ κ΅¬ν˜„ν•˜λ €κ³  ν•©λ‹ˆλ‹€.

κΈ°λŠ₯으둜 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 것은 μ•½κ°„ μ΄μƒν•©λ‹ˆλ‹€. μ™œλƒν•˜λ©΄ 쒅속성 트리의 _any_ ν¬λ ˆμ΄νŠΈμ— vendor κΈ°λŠ₯ μ„ΈνŠΈμ™€ ν•¨κ»˜ rocksdb κ°€ ν¬ν•¨λ˜μ–΄ 있으면 RocksDBκ°€ κ³΅κΈ‰λœλ‹€λŠ” 의미이기 λ•Œλ¬Έμž…λ‹ˆλ‹€. μž‘μ€ μƒμžμ—λŠ” 큰 차이가 없을 κ²ƒμ΄μ§€λ§Œ RocksDB에 μ—¬λŸ¬ 전이 쒅속성을 κ°€μ§ˆ 수 μžˆλŠ” 큰 λ°”μ΄λ„ˆλ¦¬μ˜ 경우 곡급업체λ₯Ό 선택 ν•΄μ œν•  방법이 없을 κ°€λŠ₯성이 λ†’μŠ΅λ‹ˆλ‹€.

@jonhoo λ§žμ•„μš” ,

IMHOλŠ” νŒλ§€κ°€ μ „ν˜€ μ—†μ–΄μ•Όν•˜λ©° νŒλ§€λŠ” λͺ¨λ“  μ•…μ˜ κ·Όμ›μž…λ‹ˆλ‹€. @aleksuss 와 λ‹€λ₯Έ μœ μ§€ κ΄€λ¦¬μžκ°€ 그것을 ν—ˆμš©ν•œλ‹€λ©΄ λ‚˜λŠ” ν•¨κ»˜ 판맀λ₯Ό μ—†μ• λŠ” 것을 μ„ ν˜Έν•©λ‹ˆλ‹€.

λ‚˜λŠ” λ‹Ήμ‹ μ˜ 말에 λ™μ˜ν•©λ‹ˆλ‹€. 해결책은 곡급업체가 μ•„λ‹Œ κ²ƒμž…λ‹ˆλ‹€. μ΅œμ†Œν•œ 벀더링은 κΈ°λ³Έ κΈ°λŠ₯ μ„ΈνŠΈμ— ν¬ν•¨λ˜μ–΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€. ν•œ 가지 μ˜΅μ…˜μ€ ν™˜κ²½ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 곡급업체가 μ˜΅νŠΈμΈν•˜λ„λ‘ ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

κ·Έλ ‡κ²Œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. @aleksuss @vitvakatu μ—¬λŸ¬λΆ„ 생각은 μ–΄λ–€κ°€μš”?

전이적 μ’…μ†μ„±μ˜ 경우 κΈ°λŠ₯을 μ œμ–΄ν•˜κΈ°κ°€ μ‹€μ œλ‘œ μ–΄λ ΅κ³  μ†ŒμŠ€μ—μ„œ RocksDBλ₯Ό μ»΄νŒŒμΌν•˜λŠ” 데 λ§Žμ€ λΉ„μš©μ΄ λ“­λ‹ˆλ‹€(우리 ν”„λ‘œμ νŠΈμ˜ 경우 λΉŒλ“œ μ‹œκ°„μ΄ μ•½ 30% μ¦κ°€ν•©λ‹ˆλ‹€!). κ·ΈλŸ¬λ‚˜ λ‚˜λŠ” 벀더링을 μ™„μ „νžˆ μ œκ±°ν•œλ‹€λŠ” 아이디어λ₯Ό μ’‹μ•„ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 일뢀 ν”Œλž«νΌμ—μ„œλŠ” μ‚¬μš© κ°€λŠ₯ν•œ μ΅œμ‹  rockdb 버전이 μ—†μŠ΅λ‹ˆλ‹€. 심지어 이전 Ubuntu λ°°ν¬νŒμ— λŒ€ν•΄ 자체 PPAλ₯Ό λ§Œλ“€μ–΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€.

λ”°λΌμ„œ ν˜„μž¬ λ™μž‘μ„ μ €μž₯ν•˜λŠ” 것을 μ„ ν˜Έν•˜μ§€λ§Œ κ°œμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€(μžλ™ 라이브러리 검색?). μ•„λ§ˆλ„ μš°λ¦¬λŠ” μ‚¬μš©μžκ°€ (env varλ₯Ό 톡해) μˆ˜λ™μœΌλ‘œ 벀더링을 ν™œμ„±ν™”ν•΄μ•Ό ν•  μˆ˜λ„ μžˆμ§€λ§Œ, 전이적 쒅속성에도 μ•½κ°„ μ„±κ°€μ‹€ κ²ƒμž…λ‹ˆλ‹€.

κΈ€μŽ„, ν˜„μž¬ λ§ˆμŠ€ν„°μ—μ„œ librocksdb-sysλ₯Ό λΉŒλ“œν•˜λ €κ³  ν•˜λ©΄ μ‹œμŠ€ν…œ 전체 라이브러리둜 rockdbλ₯Ό μ„€μΉ˜ν–ˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³  μ—¬μ „νžˆ λ§Žμ€ C++ 컴파일러 μΈμŠ€ν„΄μŠ€λ₯Ό νšŒμ „μ‹œν‚΅λ‹ˆλ‹€.

이것은 λ˜ν•œ κ½€ 이상해 보이며 μ•„λ§ˆλ„ μˆ˜μ •λ˜μ–΄μ•Ό ν•  κ²ƒμž…λ‹ˆλ‹€.

@vitvakatu 예, μ‚¬μš©μžκ°€ 벀더링을 μ„ νƒν•˜λ„λ‘ λ™μž‘μ„ "λ°˜μ „"ν•˜λŠ” 것이 μ˜¬λ°”λ₯Έ 방법이라고 μƒκ°ν•©λ‹ˆλ‹€. :)

이것은 λ˜ν•œ κ½€ 이상해 보이며 μ•„λ§ˆλ„ μˆ˜μ •λ˜μ–΄μ•Ό ν•  κ²ƒμž…λ‹ˆλ‹€.

env varsκ°€ μ„€μ •λ˜μ–΄ μžˆμ§€ μ•ŠμœΌλ―€λ‘œ 이것이 였늘의 μ˜λ„λœ λ™μž‘μ΄λΌκ³  μƒκ°ν•©λ‹ˆλ‹€.

μ’‹μ•„, λ‚˜λŠ” 행동을 λ’€μ§‘μ—ˆλ‹€ :)

@lovesegfault 제 μƒκ°μ—λŠ” λ™μž‘μ„ λ°˜μ „μ‹œν‚€λŠ” 경우 build.rs rocksdb κ°€ /usr/lib λ˜λŠ” 기본적으둜 rocksdb μ—μ„œ /usr/lib rocksdb λ₯Ό κ²€μƒ‰ν•˜λ„λ‘ ν•΄μ•Ό ν•©λ‹ˆλ‹€. 그렇지 μ•ŠμœΌλ©΄ λ§Žμ€ μ‚¬μš©μžκ°€ env var μ„ΈνŠΈκ°€ μ—†κΈ° λ•Œλ¬Έμ— κ°‘μžκΈ° 컴파일 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

μ’‹μŠ΅λ‹ˆλ‹€. 보λ₯˜ 쀑인 μž‘μ—…μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  • λ„μ„œκ΄€ 발견
  • vendor κΈ°λŠ₯을 envvar둜 μ „ν™˜
이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰