[REDIS] 얼랑 및 레디 스 : 읽기 성능
REDIS얼랑 및 레디 스 : 읽기 성능
레디 스를 소트 세트에서 100 만 기록을 읽으려고 할 때 갑자기 성능 문제가 발생했습니다. 나는 커서 및 배치 크기 5K로 ZSCAN을 사용했다.
코드는 호스트 레디 스 같은 시스템에 얼랑 R14를 사용하여 실행되었다. 5K 요소 일괄 받기 1초 근처 걸린다. 불행하게도,이 컴퓨터에 얼랑 R16를 컴파일하는 데 실패,하지만 난 그게 중요하지 않습니다 생각합니다.
비교를 위해, node_redis (hiredis 파서)와 Node.js를 코드 2 초 1M을한다. Python과 PHP에 대한 동일한 결과.
어쩌면 내가 뭔가 잘못을합니까?
미리 감사드립니다.
여기 내 얼랑 코드는 다음과 같습니다
-module(redis_bench).
-export([run/0]).
-define(COUNT, 5000).
run() ->
{_,Conn} = connect_to_redis(),
read_from_redis(Conn).
connect_to_redis() ->
eredis:start_link("host", 6379, 0, "pass").
read_from_redis(_Conn, 0) ->
ok;
read_from_redis(Conn, Cursor) ->
{ok, [Cursor1|_]} = eredis:q(Conn, ["ZSCAN", "if:push:sset:test", Cursor, "COUNT", ?COUNT]),
io:format("Batch~n"),
read_from_redis(Conn, Cursor1).
read_from_redis(Conn) ->
{ok, [Cursor|_]} = eredis:q(Conn, ["ZSCAN", "if:push:sset:test", 0, "COUNT", ?COUNT]),
read_from_redis(Conn, Cursor).
해결법
-
==============================
1.10 회 9 밖으로,이 같은 속도 저하는 더이 시스템의 결과보다 심하게 작성된 드라이버의 결과이다. 이 경우, 레디 스 파이프 라인을 요청 할 수있는 능력이 중요 할 것입니다. 리두 같은 클라이언트는 파이프 라인을 어쩌면 빠르게 할 수 있습니다.
10 회 9 밖으로,이 같은 속도 저하는 더이 시스템의 결과보다 심하게 작성된 드라이버의 결과이다. 이 경우, 레디 스 파이프 라인을 요청 할 수있는 능력이 중요 할 것입니다. 리두 같은 클라이언트는 파이프 라인을 어쩌면 빠르게 할 수 있습니다.
또한, 하나의 프로세스 측정을 조심 / 스레드 만. 당신이 빠른 동시 액세스를 원하는 경우에, 그것은 종종 빠른 순차 액세스에 대해 상쇄된다.
-
==============================
2.레디 스-ERL로 전환 16 초 1M 키의 읽기 시간이 감소 하였다. 빠르지 만 허용.
레디 스-ERL로 전환 16 초 1M 키의 읽기 시간이 감소 하였다. 빠르지 만 허용.
여기에 새로운 코드는 다음과 같습니다
-module(redis_bench2). -export([run/0]). -define(COUNT, 200000). run() -> io:format("Start~n"), redis:connect([{ip, "host"}, {port, 6379}, {db, 0}, {pass, "pass"}]), read_from_redis(). read_from_redis(<<"0">>) -> ok; read_from_redis(Cursor) -> [{ok, Cursor1}|_] = redis:q(["ZSCAN", "if:push:sset:test", Cursor, "COUNT", ?COUNT]), io:format("Batch~n"), read_from_redis(Cursor1). read_from_redis() -> [{ok, Cursor}|_] = redis:q(["ZSCAN", "if:push:sset:test", 0, "COUNT", ?COUNT]), read_from_redis(Cursor).
from https://stackoverflow.com/questions/22577849/erlang-and-redis-read-performance by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 레디 스 개념 : 메모리 또는 DB에서? (0) | 2020.01.25 |
---|---|
[REDIS] 나는 루비 다이제스트 :: SHA1 인스턴스 객체를 직렬화 할 수 있나요? (0) | 2020.01.25 |
[REDIS] 옴 / 레디 스에서 동적 필드를 설정 (0) | 2020.01.25 |
[REDIS] 사용 레디 스는 제한된 범위에서 고유 ID를 생성하는 (0) | 2020.01.25 |
[REDIS] 레디 스 구독의 출력을 리디렉션하는 방법 (0) | 2020.01.25 |