태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

'느려'에 해당되는 글 1건

  1. 2010.02.11 사용소감2: Google protocol buffer (1)

사용소감2: Google protocol buffer

Tech 2010. 2. 11. 14:20
빠르다길래 믿고 그냥 가져다가 쓰고 있었는데, 테스트 코드를 돌릴 때는 모르다가 진짜 데이터( ... ) 들이 들어가기 시작하니 시스템 퍼포먼스가 말도 안되도록 떨어졌다. 여기서 한번 피 토해주고 (쿨럭) ... 아, 빠르다는건 <XML에 비해서>인 듯 하다. 이거 머야 대체! 하면서 프로파일링을 해봤는데, ... 응?

SerializeToString, ParseFromString

이녀석들이 나란히 1등, 2등?

패인은 repeated 에 있었다. 몇 가지 부가 정보와 함께 수십만(최대 백만 정도)개의 32bit integer 들을 빠르게 주고받는 시스템인데, 이걸 repeated uint32 id_list; 같은 식으로 만들어 사용했다. 이 녀석을 Serialize, Parse 하는 부분이 대박이었던 것. 테스트 할 때에는 적당히 수백개 정도만 넣어봐서 차이를 잘 못느꼈는데, 이게 커지니까 ... ... -_-a

아마 타입검사라던가, ... 때문이 아닐까 한다.

dgoon@katy:~/works/pb2$ cat test.proto 
message Test {
    repeated uint32 id_list = 1;
};
dgoon@katy:~/works/pb2$ protoc --python_out=. test.proto 
dgoon@katy:~/works/pb2$ cat test.py
import cPickle
import random
from array import array
from test_pb2 import Test

def elapsed(stmt):
    import time
    st = time.time()
    exec(stmt)
    return time.time() - st

test_arr = [r for r in xrange(100000)]

msg_pb2 = Test()
msg_pb2.id_list.extend(test_arr)
arr = array('I', test_arr)
print('pb2 ser: %5.4f' % elapsed('msg_pb2.SerializeToString()'))
print('pb2 ser-par: %5.4f' % elapsed('Test().ParseFromString(msg_pb2.SerializeToString())'))
print('pickle ser: %5.4f' % elapsed('cPickle.dumps(test_arr)'))
print('pickle ser-par: %5.4f' % elapsed('cPickle.loads(cPickle.dumps(test_arr))'))
print('array ser: %5.4f' % elapsed('arr.tostring()'))
print('array ser-par: %5.4f' % elapsed('array("I").fromstring(arr.tostring())'))
dgoon@katy:~/works/pb2$ python test.py
pb2 ser: 0.3849
pb2 ser-par: 0.9537
pickle ser: 0.0400
pickle ser-par: 0.0823
array ser: 0.0004
array ser-par: 0.0006
dgoon@katy:~/works/pb2$ 

그래서 결국에는, array.tostring() 을 사용해서 뽑은 문자열을 프로토콜 버퍼에 bytes 타입으로 붙여서 보낸 다음 (with packed_ prefix) 사용하는 시점에 array.fromstring()푸는 형태로 고쳤다. 일단 이렇게 속도는 잡았는데 ... ... 크흑, 귀찮아. 프로토콜 버퍼가 생성한 객체를 확장해서 써야 할 것 같다.

'Tech' 카테고리의 다른 글

Bit count with CUDA (T_T)  (3) 2010.05.16
iterator invalidation  (5) 2010.05.10
사용소감2: Google protocol buffer  (1) 2010.02.11
사용소감: Google protocol buffer  (4) 2010.02.04
TDD: 켄트백아저씨가 쓴 책이지?  (2) 2009.12.29
git/git-svn on working machine  (2) 2009.12.17
Trackbacks 0 : Comments 1
  1. Favicon of http://19513regionalsgateway.com ghd 2013.07.15 13:39 Modify/Delete Reply

    지금은 반짝반짝 빛이 나겠지,, 하지만 시간이 흐르면 그빛은 사라저버릴거야,지금 우리처럼

Write a comment