μ΄λ²μ£Όμ λ€μ΄μλΆν° μ¬λ¬ κΈ°λ₯μ μ‘°κΈμ© ν기보λ€λ ν κΈ°λ₯μ μ§μ€ν΄μ λΆμνκ³ κ³΅λΆνλ μκ°μ κ°μ§κ³ μλ€
κ·Έκ² μ§μ ν μ±λ¦°μ§νμ λ¬λ―ΈλΌκ³ ν΄μ ,, π
μμμΌμλ ν μ€νΈμ½λ(Junit), λμμ±μ μ΄μ λν΄μ 곡λΆλ₯Ό νμκ³
νμμΌ~μμμΌμλ 곡λΆνκ²μ λ°νμΌλ‘ λ΄ νλ‘μ νΈμ μ μ©ν΄λ³΄κ³ , λ΄κ° μ±λ₯ κ°μ ν κΈ°λ₯μ λν΄ λ―μ΄λ³΄λ μκ°μ κ°μ‘λ€.
μλμ λ΄μ©μ μ€λ λ΄κ° κΈ°λ₯μ λ―μ΄λ³΄λ©΄μ, μ΄λ»κ² ꡬνν μ§ κ³ λ―Όμ ν λΆλΆμ΄λ€ !
μ€ν μ΄ μ 보 μ λ°μ΄νΈ, μ΄λ€ μμ μ μ΄λ»κ² μ²λ¦¬ν΄μΌν κΉ ? π€
κΈ°λ₯ :
- μ€ν μ΄μ 보(λ³μ & λ°©λ¬Έμ 리뷰 κ°―μ) μ λ°μ΄νΈ κΈ°λ₯
κΈ°λ₯ λͺ μΈ :
- μ λ³΄κ° μ λ°μ΄νΈ λ μ€ν μ΄κ° μμ κ²½μ° μ£ΌκΈ°μ μΌλ‘ νμΈνμ¬ μ 보λ₯Ό κ°±μ νλ κΈ°λ₯
ꡬν λ°©ν₯ :
- μ¬μ©μ 리뷰 λ±λ‘ μ μνκ° μ λ°μ΄νΈ λ μ€ν μ΄ μ 보(ex. μ€ν μ΄ ID, λ³μ λ±)λ₯Ό Redis Cacheμ μ μ₯
- Redisμ μ μ₯λ μ 보λ₯Ό μΌμ μ£ΌκΈ°λ§λ€ μ½μ΄μ λ³κ²½λ μ 보λ₯Ό Store ν
μ΄λΈμ μ
λ°μ΄νΈ μ²λ¦¬
⇒ μ΄ λΆλΆμ μ΄λ»κ² μ²λ¦¬ν μ§μ λν κ³ λ―Ό !!
κΈ°μ μ κ³ λ―Ό:
1) Redisμ μ΄λ€ μ 보λ₯Ό μ μ₯νκ³ , μ΄λ»κ² μ¬μ©ν κ²μΈμ§?
*) Redis Cacheμ λ°μ΄ν° μ μ₯λ°©μμ Set λ°©μμΌλ‘ μ μ₯λ¨(μ€λ³΅λ κ° μ μ₯ X)
Case1 . μ λ°μ΄νΈ λ μ€ν μ΄ ID μ λ³΄λ§ Redis Cacheμ μ μ₯(μλ‘ μ μ©ν λ°©μ)
- μ λ°μ΄νΈ λ μ€ν μ΄IDλ§ μ μ₯νκ³ Review ν μ΄λΈμμ μ€ν μ΄IDμ μΌμΉνλ λ μ½λλ€μ μ‘°ννμ¬ μ€ν μ΄ μ 보λ₯Ό κ°±μ νλ λ°©λ²
- λ°°μΉνλ‘κ·Έλ¨μ΄ λμνκΈ° μ΄μ μ λͺκ°μ λ¦¬λ·°κ° λ±λ‘λμλμ§ μ²΄ν¬νμ§μκ³ , μ
λ°μ΄νΈκ° λμλμ§/μλμλμ§λ§ νμΈνμ¬
Redisμ μ λ³΄κ° λ³κ²½ λ StoreIdλ₯Ό μ μ₯νλ λ°©μ
쿼리문 λ° μ€ν μλ
// μ¬μ©νλ 쿼리문
UPDATE store a
SET
a.review_cnt = ( SELECT count(*) FROM review where storeid = μ€ν μ΄ID),
a.star_score = TRUNCATE((select avg(star_score) from review where storeid = μ€ν μ΄ID),2)
WHERE store_id= μ€ν μ΄ID;
⇒ Thoughput : 1.1/sec , μ΅μμκ° 20 / μ΅λμκ° 511
Case2 . μ λ°μ΄νΈ λ μ€ν μ΄ ID , λ³μ μ 보, μ¬μ©μ μ 보 Redis Cacheμ μ μ₯(κΈ°μ‘΄ μ μ© λ°©μ)
- μ λ°μ΄νΈ λ μ€ν μ΄ID λ° κ°±μ λ μ 보λ€μ μ μ₯νμ¬ Redisμ μ μ₯λ μ λ³΄λ‘ DBμ μ λ°μ΄νΈ νλ λ°©λ²
- Redis Cacheμ μλ λ°μ΄ν°λ₯Ό κΈ°λ°μΌλ‘ Store μ 보λ₯Ό μ λ°μ΄νΈ νλ λ°©μ μΊμμ μ μ₯λλ λ°μ΄ν°μ 무결μ±μ΄ μ€μν¨!
쿼리문 λ° μ€ν μλ
// μ¬μ©νλ 쿼리문
UPDATE store a
SET
a.review_cnt = review_cnt + 1,
a.star_score = TRUNCATE (((((review_cnt - 1) * star_score) + μ
λ ₯λ λ³μ ) / review_cnt), 2)
WHERE store_id= μ€ν μ΄ID;
⇒ Thoughput : 1.1/sec , μ΅μμκ° 17 / μ΅λμκ° 154
2) λκ°μ§ λ°©μ λΉκ΅
- μ€ν μλ :
⇒ Case 2 λ°©μμ΄ Case 1 λ°©μλ³΄λ€ μν μλλ μ½ 3λ°° λλ¦Ό - λ°λ³΅ νμ :
⇒ Case 1 λ°©μμ 1λ² / Case λ°©μμ 10λ²μ μΏΌλ¦¬κ° μν λ¨
⇒ Case 1 λ°©μμ 4λ² / Case 2 λ°©μμ 40λ² μν λ¨ - μν© λ³ ν
μ€νΈ μΌμ΄μ€ :
μν© 1. A μ€ν μ΄ λ¦¬λ·°κ° 10κ° λ±λ‘ λμμ κ²½μ°
⇒ Case 1 λ°©μμ 1λ²λ§ 쿼리 / Case λ°©μμ 10λ²μ μΏΌλ¦¬κ° μν
μν© 2. A,B,C,D μ€ν μ΄μ λ¦¬λ·°κ° κ°κ° 10κ°μ© λ±λ‘λμμ κ²½μ°
⇒ Case 1 λ°©μμ 4λ² μΏΌλ¦¬ μ§μ μν / Case 2 λ°©μμ 40λ² μν λ¨
κ³ λ―Όνλ μ β
Q.
쿼리 μν μκ° μ체λ κ°μλμ§λ§, λ§μ 쿼리λ₯Ό λ λ¦¬κ² λλ Case 2 λ°©μμ μ¬μ©νλκ² ν¨μ¨μ μΌμ§?
μνμκ°μ μ¦κ°λμ§λ§, μ μ 쿼리λ₯Ό λ°μμν€κ³ Redis Cacheμ λ°μ΄ν°λ₯Ό μ κ² μ μ¬νλ 1 λ°©μμ΄ ν¨μ¨μ μΌμ§?
- Case1μ μ μ©νκ³ , 쿼리 μκ°μ κ°μ μν¬ μ μλ λ°©μμ λν΄ κ³ λ―Όνλκ²μ΄ μ’μ κ² κ°μ!
- Case2 λ°©μμΌλ‘ μ¬μ©νμμ λ DBμ μλΉν λΆλ΄μ μ€ μ μμ κ²μ΄λΌκ³ νλ¨
⇒ λΆλ΄λ μ€μ΄κ³ , 쿼리 μν μλλ μ€μ΄λ λ°©ν₯μΌλ‘ κ³ !
( 1μ°¨ μ μ© : View ν μ΄λΈ μμ± λ° μ μ© )
Q.
Case 1 λ°©μμ μ¬μ©ν λ κΌ Redis Cacheλ₯Ό μ¬μ©ν΄μΌν κΉ?
μλλ©΄ λ€λ₯Έ λ체 λ°©λ²μ΄ μ΄λ€κ²μ΄ μμκΉ? π§
- 리뷰 λ±λ‘ μ Review ν
μ΄λΈμ μλ³μλ₯Ό μ£Όμ΄ κ΅¬λ³νλ λ°©λ²
⇒ λ°°μΉ μλΉμ€μμλ DBμμ UpdateInfoκ° TrueμΈ Storeμ λ³΄λ§ μ λ°μ΄νΈ
⇒ Review Tableμ UpdateInfo λΌλ 컬λΌμ μΆκ°νμ¬ λ¦¬λ·° λ±λ‘ μ Trueλ‘ κ°μ λ³κ²½νλ€.
μ΄ λ°μλ λμμ± μ μ΄ λΆλΆμ κ³ λ―Όνκ³ μλλ° μ§κΈκΉμ§ ν μ€νΈ ν κ²μΌλ‘λ μμ λ°©μμ μ μ©νμ λ
λμμ± μ΄μκ° λ°μνμ§ μλλ€ (ν΄λΌμ΄μΈνΈκ° μ¬λΏμ΄μ¬λ DBμ μ
λ°μ΄νΈνλ 주체(Redis)λ νκ°μ΄κΈ° λλ¬Έμ)
λ΄μΌ μ‘°κΈ λ κ³ λ―Όν΄λ³΄κ³ λ€λ₯Έ λΆλΆμμ λμμ± μ΄μκ° ν°μ§λ§ν λΆλΆμ μλμ§? μΆκ°ν΄μ κΈ μμ±ν΄λ¬μΌκ² λΉ
'π ν΄μ 99 μ€μ νλ‘μ νΈ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μ΅νμ 1μΈ ,. μ£½μ¬μ€ .. (2) | 2023.02.07 |
---|---|
Etc | μ€λμ μλ γ (1) | 2023.01.31 |
[μ€μ νλ‘μ νΈ 20Day] 3μ£Όμ°¨ νκ³ - μ΄λ²μ£Όμ λλ π (2) | 2023.01.21 |
[μ€μ νλ‘μ νΈ 17Day] μ€λμ λλ (0) | 2023.01.18 |
[μ€μ νλ‘μ νΈ 16Day] 2μ£Όμ°¨ νκ³ (+μ€κ°λ°ν) (0) | 2023.01.16 |