본문 바로가기
개발/ALGOLIA

알고리아 Sending And Managing Data(2-13)

by dev_caleb 2022. 3. 1.
728x90

Sending Records in Batches(레코드 일괄 전송)

https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/how-to/sending-records-in-batches/

Whether you’re using the API or Algolia dashboard, it’s best to send several records at a time instead of pushing them one by one. This has many benefits: it reduces network calls and speeds up indexing. Batching has a major impact on performance when you have a lot of records, but everyone should send indexing operations in batches whenever possible.

API를 사용하든 알골리아 대시보드를 사용하든 레코드를 하나씩 푸시하지 말고 한 번에 여러 개 보내는 것이 가장 좋다. 네트워크 호출을 줄이고 인덱싱 속도를 높이는 등 많은 이점이 있습니다. 레코드가 많을 경우 일괄 처리가 성능에 큰 영향을 미치지만 가능한 경우 모든 사용자가 일괄 인덱싱 작업을 전송해야 합니다.

 

 

For example, imagine you’re fetching all data from your database and end up with a million records to index. That would be too big to send in one take, because Algolia limits you to 1 GB per request. Plus, sending that much data in a single network call would fail anyway before ever reaching the API. You might go for looping over each record and send them with the saveObjects method. The problem is that you would perform a million individual network calls, which would take way too long and saturate your Algolia cluster with as many indexing jobs.

A leaner approach is to split your collection of records into smaller collections, then send each chunk one by one. For optimal indexing performance, aim for a batch size of ~10 MB, which represents between 1,000 or 10,000 records depending on the average record size.

예를 들어, 데이터베이스에서 모든 데이터를 가져와 인덱싱할 레코드가 백만 개라고 가정해 보십시오. 알골리아는 요청당 1GB로 제한하기 때문에 one take로 전송하기에는 너무 큽니다. 게다가, 한 번의 네트워크 호출로 그렇게 많은 데이터를 보내는 것은 API에 도달하기 전에 실패한다. 각 레코드를 반복하여 saveObjects 메서드로 보낼 수 있습니다. 문제는 수백만 개의 개별 네트워크 호출을 수행할 경우 시간이 너무 오래 걸리고 Algolia 클러스터를 인덱싱 작업으로 포화 상태로 만들 수 있다는 것입니다.
더 적은 접근 방식은 레코드 컬렉션을 더 작은 컬렉션으로 분할한 다음 각 청크를 하나씩 보내는 것입니다. 최적의 인덱싱 성능을 위해 평균 레코드 크기에 따라 1,000개에서 10,000개 사이의 레코드를 나타내는 최대 10MB의 배치 크기를 목표로 합니다.

 

 

Batching records doesn’t reduce your operations count. Algolia counts indexing operations per record, not per method call, so from a pricing perspective, batching records is no different from indexing records one by one.레코드를 일괄 처리한다고 해서 운영 횟수가 줄어들지는 않습니다. 알골리아는 메서드 호출이 아닌 레코드별로 인덱싱 작업을 세기 때문에 가격 관점에서 레코드를 일괄 처리하는 것은 레코드를 하나씩 인덱싱하는 것과 다를 바 없다.

 

When using the saveObjects method, the API client automatically chunks your records into batches of 1,000 objects.If you need to send data from large files and handle concurrency in JavaScript, you can also use algolia-cli with the algolia import command.

 

const algoliasearch = require('algoliasearch')
const fs = require('fs');
const StreamArray = require('stream-json/streamers/StreamArray');

const client = algoliasearch('YourApplicationID', 'YourAdminAPIKey');
const index = client.initIndex('actors');

const stream = fs.createReadStream('actors.json').pipe(StreamArray.withParser());
let chunks = [];

stream
  .on('data', ({ value }) => {
    chunks.push(value);
    if (chunks.length === 10000) {
      stream.pause();
      index
        .saveObjects(chunks, { autoGenerateObjectIDIfNotExist: true })
        .then(() => {
          chunks = [];
          stream.resume();
        })
        .catch(console.error);
    }
  })
  .on('end', () => {
    if (chunks.length) {
      index.saveObjects(chunks, { 
        autoGenerateObjectIDIfNotExist: true
      }).catch(console.error);
    }
  })
  .on('error', err => console.error(err));

With this approach, you would make 100 API calls instead of 1,000,000. Depending on the size of your records and your network speed, you could create bigger or smaller chunks. 이 방법을 사용하면 1,000,000 대신 100개의 API 호출을 할 수 있습니다. 레코드 크기와 네트워크 속도에 따라 더 크거나 더 작은 청크를 만들 수 있습니다.

 

Using the dashboard(대시보드 사용하기)

You can also send your records in your Algolia dashboard.(레코드를 대시보드로 전송할 수 있다)

Add records manually(레코드 수동으로 추가하기)

  • Go to your dashboard, select the Data Sources icon and then select your index.
  • Click the Add records tab and select Add manually.
  • Copy/paste your chunk in the JSON editor, then click Push record.
  • Repeat for all your chunks.

-대시보드로 이동하여 데이터 소스 아이콘을 선택한 다음 색인을 선택합니다.
-레코드 추가 탭을 클릭하고 수동으로 추가를 선택합니다.
-JSON 편집기에서 청크를 복사/붙여넣은 다음 Push record(레코드 푸시)를 클릭합니다.
-당신의 모든 청크에 대해 반복하세요.

Upload a file

  • Go to your dashboard and select your index.
  • Click Manage current index then Upload file.
  • Either click the file upload area to select the file where your chunk is, or drag it on it.
  • Upload starts automatically.
  • Repeat for all your chunks.

-대시보드로 이동하여 색인을 선택합니다.
-현재 인덱스 관리를 클릭한 다음 파일 업로드를 클릭합니다.
-파일 업로드 영역을 클릭하여 청크가 있는 파일을 선택하거나 그 위로 끕니다.
-업로드가 자동으로 시작됩니다.
-당신의 모든 청크에 대해 반복하세요.

 

 

 

 

 

 

728x90