'전체 글'에 해당되는 글 96건

그놈의 timezone 그리고 망할 DST때문에 한동안 머리가 아팠다.

하지만 결국 답을 얻었다. 컴퓨터는 항상 답이 있다. 정말 좋다. I love it!

아무튼. 방법이 뭐냐면

일단 뭐 frequency를 어떻게 하냐는 자기 맘이겠지만, 일단 하루로 하고

1. 하루에 한번씩 모든 timezone name(예를 들어 Asia/Seoul)을 쭉 가져와서 각각의 offset을 테이블로 저장해서 redis나 memory 변수에 들고 있는다.

뭐 대강 이런 느낌일 것이다.

{

"+0900": ['Asia/Seoul', 'Asia/..', '...']

"+0830": [....],

....

}

이렇게 해보면 약 40개정도의 offset키에 모든 타임존 리스트가 정리되어진다.


2. 이제 우리에게 필요한 것은 푸시 예약이다.

푸시 예약은 두가지 방법으로 할 수 있다. 첫번째는 UTC기준 두번째는 각 지역기준.

만약 UTC기준이라면 전체 타임존에 동일한 시점에 일괄 발송하겠다는 것이다. 이때는 위에서 만든 타임존 오프셋 테이블을 쓸 필요없이 그냥 그 UTC시간이 되었을떄 일괄 발송하면된다.

두번째가 관건이다. 이것을 위해 이짓을 하는거니까. 바로 지역시간 기준.

자 지역시간 기준 12:00. 각 지역이 12:00가 되었을때 푸시를 보내는 것이다.

일단 12시를 UTC로 저장해 놓고 매 분 도는 스케줄러가 저 오프셋 테이블의 키값을 가져와서 UTC 시간에 오프셋을 더해서 그게 현재 시간이면 그에 해당하는 타임존 녀석들에게 푸시를 보내는 것이다. (물론 이것을 위해서는 유저정보에 타임존 네임이 있어야 할것이다)


자 나는 이렇게 구현할거고 서비스 할것이다. 으하하하 

'서버 교양' 카테고리의 다른 글

Docker overview  (0) 2015.06.13
SSL 인증서 발급  (0) 2015.03.04
글로벌 푸시 보내기  (0) 2014.11.27
mongodb만 쓰면 mysql을 과연 안써도 될까?  (0) 2014.04.23
쿠키런 서버사이드 이야기  (0) 2014.04.04
블로그 이미지

시간을 거스르는자

ytkang86@gmail.com

,

[Redis] HSET vs SET

redis 2015. 1. 9. 11:53

멀까 뭘써야할까?

SET은 그냥 키 벨류

HSET은 키 하나에 여러개를 쪼개서 넣을 수 있다.

예를 들어 유저 id를 Hash키로 잡고 {nickname: 'John', age:35}  이렇게 id에 국한된 데이터를 한데 저장할 수 있다.

검색을 해보면 계산시간에 대해 다음과 같은 말도 있다.

SET은 키 문자열 그대로 저장하고 써서 찾아내는 CPU 계산 시간이 빠르다.
HSET은 키 문자열을 한번 짧은 길이로 바꿔서 저장하기 때문에 요고 맵핑하는 계산이 한번 더 들어간다. 그러나 이 시간은 최대 ziplist(키 encode/decode할때 쓰는 code리스트 인듯) 크기만큼 든다. 

키를 겁네 많이 저장해놓고 쓰는 경우가 많아서 메모리를 효율적으로 쓰기위해선 HSET을 쓰는게 좋다. 라고 생각할 수도 있겠지만 결국은 "어떤 자료구조를 쓸 것인가"가 중요하다고 한다.

그냥 키 벨류한쌍이 필요한 거면 SET을 쓰고, 위와같이 ID에 묶여있는 정보들을 쓸거면 HSET을 쓰고.


Reference

1. http://stackoverflow.com/questions/12779372/hset-vs-set-memory-usage

2. http://grokbase.com/t/gg/redis-db/12a89re9n7/hset-vs-set-memory-usage

'redis' 카테고리의 다른 글

zscore list copy  (0) 2016.10.12
redis sentinel  (0) 2015.11.30
블로그 이미지

시간을 거스르는자

ytkang86@gmail.com

,

아직 구현된건 아니고 생각일뿐.

문제) 모든 유저에게 오후 1시에 푸시 메시지를 보내고 싶다. 그런데 세계의 각 지역은 당연히 시간이 다르거니와 같은 국가라도 시간이 다르며 또한 섬머타임으로 인해 같은 지역이라 해도 시간이 변동된다.


방법)

1. 유저는 회원가입할때 아래 정보를 서버에게 알려준다.

 - utc_offset(dst time적용되지 않았을때 offset), dst_offset(dst 적용되었을때 offset), dst_starttime, dst_endtime


2. 서버에서 푸시 예약 등록을 할때 13시 정보에 대해서 모든가능한 offset에 대해서 schedule 예약을 해둔다.

예) -12 ~ +14 까지.

이중에서 offset +2 가 보내질 시간이 되면 디비에서 다음에 해당하는 그룹을 가져와서 푸시를 보낸다.

그룹 1) utc_offset 이 2 이고 start, end time이 없는 유저 그룹

그룹 2) dst_offset 이 2 이고 now가 start, end time에 포함되는 그룹


근데 start end time 필드를 넣어놓고 쿼리 때리는게 넘 느려보인다.. 


블로그 이미지

시간을 거스르는자

ytkang86@gmail.com

,