복붙노트

[REDIS] 어떻게 Node.js를 파이프 라인에 레디 스 하는가?

REDIS

어떻게 Node.js를 파이프 라인에 레디 스 하는가?

나는 node.js.을 통해 대량 삽입 \ 파이프 라인을 찾고 있어요, 그래서 DB를 레디 스에 많은의 삽입 (SET \ INCR)에 데이터를

나는 어떤 도움이 좋을 것 때문에, Node.js를 그렇게 일을위한 좋은 예 / API를 찾을 수 없습니다!

해결법

  1. ==============================

    1.네, 그에 대한 예제의 부족이 있다는 것을 동의해야하지만 난 배치 여러 삽입 명령을 전송하는 스트림을 만들 수 있었다.

    네, 그에 대한 예제의 부족이 있다는 것을 동의해야하지만 난 배치 여러 삽입 명령을 전송하는 스트림을 만들 수 있었다.

    당신은 레디 스 스트림 모듈을 설치해야합니다 :

    npm install redis-stream
    

    그리고 이것은 당신이 스트림을 사용하는 방법입니다 :

    var redis = require('redis-stream'),
        client = new redis(6379, '127.0.0.1');
    
    // Open stream
    var stream = client.stream();
    
    // Example of setting 10000 records
    for(var record = 0; record < 10000; record++) {
    
        // Command is an array of arguments:
        var command = ['set', 'key' + record, 'value'];  
    
        // Send command to stream, but parse it before
        stream.redis.write( redis.parse(command) );
    }
    
    // Create event when stream is closed
    stream.on('close', function () {
        console.log('Completed!');
    
        // Here you can create stream for reading results or similar
    });
    
    // Close the stream after batch insert
    stream.end();
    

    언제든지 원하는대로 당신이 원하는 열기 / 닫기를 같이 또한, 다수의 스트림으로 만들 수 있습니다.

    레디 스를 사용하는 몇 가지 예는 레디 스 스트림 노드 모듈 Node.js를 거기는 스트림

  2. ==============================

    2.node_redis에서 모든 명령이 파이프 라인이 있습니다 :

    node_redis에서 모든 명령이 파이프 라인이 있습니다 :

    https://github.com/mranney/node_redis/issues/539#issuecomment-32203325

  3. ==============================

    3.당신은 ()도 일괄보고 할 수 있습니다. 이 트랜잭션 때문에 그것은 멀티와 느린 것 이유는 ()입니다. 무언가가 실패하면 아무것도 실행되지 것입니다. 그게 당신이 원하는 것을 할 수있다,하지만 당신은 여기에 속도에 대한 선택의 여지가 않습니다.

    당신은 ()도 일괄보고 할 수 있습니다. 이 트랜잭션 때문에 그것은 멀티와 느린 것 이유는 ()입니다. 무언가가 실패하면 아무것도 실행되지 것입니다. 그게 당신이 원하는 것을 할 수있다,하지만 당신은 여기에 속도에 대한 선택의 여지가 않습니다.

    레디 스 스트림 패키지는 사이트 레디 스-CLI에 대한 토론에 간다 '레디 스 삽입은 질량보다 느려질 그래서 기능 삽입 매스'는 레디 스의 사용을하지 않는 것 같습니다.

    https://github.com/almeida/redis-mass : 또 다른 아이디어는 레디 스-CLI를 사용하고이 NPM 패키지 않습니다에서 스트리밍 파일을 제공하는 것

    첫 번째 디스크에있는 파일에 쓰기에 열중하지? 이 REPO : https://github.com/eugeneiiim/node-redis-pipe/blob/master/example.js

    ... 또한,하지만 파일을 작성하지 않고 레디 스에 스트리밍합니다. 그것은 생성 된 프로세스 스트림을하고 너무 자주 모든 버퍼 플러시합니다.

    대량 삽입 (http://redis.io/topics/mass-insert)에서 레디 스 '사이트에 당신은 작은 루비의 예를 볼 수 있습니다. REPO 위 기본적으로 그 Node.js를 이식 한 후 산란 한 그 레디 스-CLI 과정에 직접 스트리밍.

    그래서 Node.js를, 우리는이 :

    VAR redisPipe = 스폰 ([ '--pipe'] - CLI를 레디 스 ');

    산란은 ()는 표준 입력과에 파이프를 할 수있는 자식 프로세스에 대한 참조를 반환합니다. 예를 들면 : redisPipe.stdin.write ().

    당신은 자식 프로세스에 다음 너무 자주 매를 삭제하는 것이 스트리밍, 버퍼에 쓰기를 유지할 수 있습니다. 이것은 아마도 내가 그것으로 못 봤어하지만 (즉, 말 그대로 데이터가 메모리에 보관되어 그 문서에 말한다) 패키지를 node_redis 다음을 기입하지 않습니다 때문에 조금 더 나은 메모리보다 것이다 깊게 그 '내가 돈 때문에 t는 메모리 풋 프린트 종료가되는 것을 알고있다. 이 같은 일을 할 수있다.

    물론 뭔가 잘못되면, 모든 것이 실패 명심하십시오. 생성 된 Fluentd에 같은 어떤 도구 그의 (그리고 그의 또 다른 옵션 : http://www.fluentd.org/plugins/all - 그것은 여러 레디 스 플러그인이있다) ... 그러나 다시, 그것은 당신에게 디스크에있어 백업 데이터를 의미합니다 어느 정도 어딘가에. 나는 개인적으로 (디스크에있는 파일을 요구하는)도이 작업을 수행 할 Embulk을 사용했지만,이 느렸다 그래서, 대량 삽입을 지원하지 않았다. 그것은 30,000의 기록을 위해 거의 2 시간이 걸렸다.

    다른 데이터 소스에서 엄청난 삽입을하고있는 경우 스트리밍 방식 (안 디스크로 백업)에 대한 하나의 장점이다. 해당 데이터 소스를 가정하면 많은 양의 데이터를 반환하고 서버가 모두를 지원하는 하드 디스크 공간이없는 - 당신이 대신을 스트리밍 할 수 있습니다. 다시 말하지만, 당신은 실패 위험이 있습니다.

    나는 큰 데이터 세트를 수용 할 수 있도록 충분한 디스크 공간이 서버에서 실행하는 도커 이미지를 짓고 있어요으로이 위치에 자신을 찾을 수 있습니다. 물론 당신이 서버의 하드 디스크에있는 모든 항목에 맞게 수 있다면 많은 쉽게 ...하지만 당신은 레디 스-CLI에 스트리밍 유일한 옵션이 될 수없는 경우.

    당신이 정말로 정기적으로 주위에 많은 데이터를 밀어하는 경우, 아마 정직하게 Fluentd에 추천 할 것입니다. 그것은거야 곳으로 만드는 뭔가가 실패 할 경우, 그것은 다시 시작할 수 있습니다 데이터를 보장하기위한 많은 훌륭한 기능이 함께 제공됩니다.

    이러한 Node.js를 접근 모두 하나의 문제는 무엇인가가 실패 할 경우, 당신도 모두 잃거나 다시 모두를 삽입해야한다는 것입니다.

  4. from https://stackoverflow.com/questions/21416529/how-to-pipeline-in-node-js-to-redis by cc-by-sa and MIT license