힌트를 보내 주셔서 감사합니다! 나는 그것을 구현할 수 있었고 여기에 몇 가지 세부 사항이있다 :
제안 된대로 R (기본 패키지)에 구현 된 압축 기능을 사용했다.
memCompress()
다른 압축 gzip과 bzip2를 시도했습니다.
#In R:
x<-"{\"email\":\"[email protected]\",\"Ranking\":[{\"Number\":37665,\"rank\":1},{\"Number\":41551,\"rank\":2},{\"Number\":21684,\"rank\":3},{\"Number\":35946,\"rank\":4}]}"
y<-memCompress(charToRaw(x),type="gzip")
# [1] 78 9c 4d c9 3d 0a 80 20 00 06 d0 bb 7c b3 04 e6 4f e5 d4 09 1a 5a a3 c1 4a 42 ca 02 ad 29 bc 7b 11 48 6d 0f de 05 e3 b4 5d a1 e0 74 38 8c
# [47] af 27 1b 5e 64 e3 ee 40 d0 ea 6d b1 db 0c d5 5d 68 4e 37 18 0f c5 0a 29 05 81 7f 0a 8a 46 f2 0d a7 42 d0 34 f9 7f 72 2a 4b 9e 86 fd 87 89
# [93] 8a cb 34 3c f6 f1 06 b3 67 2d c4
rawToChar(memDecompress(y,type="gzip"))
# [1] "{\"email\":\"[email protected]\",\"Ranking\":[{\"Number\":37665,\"rank\":1},{\"Number\":41551,\"rank\":2},{\"Number\":21684,\"rank\":3},{\"Number\":35946,\"rank\":4}]}"
# R to redis:
redisConnect(host="XXX.XX.XX.XXX", port=XXXX, timeout =10) # Insert your redis information (IP and port)
x<-"{\"email\":\"[email protected]\",\"Ranking\":[{\"Number\":37665,\"rank\":1},{\"Number\":41551,\"rank\":2},{\"Number\":21684,\"rank\":3},{\"Number\":35946,\"rank\":4}]}"
redisSet("x",x) #Wrong transfer of character string to redis
# redis-cli # On redis server
# get x # On redis server
# "X\n\x00\x00\x00\x02\x00\x03\x03\x02\x00\x02\x03\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x04\x00\t\x00\x00\x00\x93{\"email\":\"[email protected]\",\"Ranking\":[{\"Number\":37665,\"rank\":1},{\"Number\":41551,\"rank\":2},{\"Number\":21684,\"rank\":3},{\"Number\":35946,\"rank\":4}]}"
redisSet("x",charToRaw(x)) #Right transfer of character string to redis
# redis-cli # On redis server
# get x # On redis server
# "{\"email\":\"[email protected]\",\"Ranking\":[{\"Number\":37665,\"rank\":1},{\"Number\":41551,\"rank\":2},{\"Number\":21684,\"rank\":3},{\"Number\":35946,\"rank\":4}]}"
redisSet("x",memCompress(charToRaw(x),type="gzip")) #Right transfer of compressed string to redis
# redis-cli # On redis server
# get x # On redis server
# "x\x9cM\xc9=\n\x80 \x00\x06\xd0\xbb|\xb3\x04\xe6O\xe5\xd4\t\x1aZ\xa3\xc1JB\xca\x02\xad)\xbc{\x11Hm\x0f\xde\x05\xe3\xb4]\xa1\xe0t8\x8c\xaf'\x1b^d\xe3\[email protected]\xd0\xeam\xb1\xdb\x0c\xd5]hN7\x18\x0f\xc5\n)\x05\x81\x7f\n\x8aF\xf2\r\xa7B\xd04\xf9\x7fr*K\x9e\x86\xfd\x87\x89\x8a\xcb4<\xf6\xf1\x06\xb3g-\xc4"
# I have not implemented the reimport to R yet. So feel free to add it :)
이 짧은 문자열에 대한 개선이 없다 : 여기에
memCompress(type="gzip",...)
memCompress(type="bzip2",...)
장난감 예제와 코드입니다. 하지만 긴 버전 (json 파일의 4 개 요소 대신 4000 개)의 경우 큰 향상이있었습니다.
압축은이 경우 메모리 사용 및 쓰기 시간이 ~ 85 % 향상되었습니다!
압축 : 4.000 요소 각각 500 명의 사용자를 작성하는 시간 레디 스하기 : 12.62 초 레디 스에 4.000 요소 각각 500 사용자들에 의해 유지 메모리 : 11.782 MB
압축 : 시간 4.000와 500 명의 사용자를 작성 88.76 초 500 명의 사용자가 메모리를 유지하면서 각 부분마다 4.000 개의 요소가 있습니다. 78.192MB
답장을 보내 주셔서 감사합니다! 나는 그렇게 할 수 있었다 :) 나는 완전한 구현 후에 기능과 개선의 수준에 대한 상세한 대답을 게시 할 것이다. – useR