2014-11-17 2 views
4

많은 이벤트를 섭취하는 응용 프로그램 (Django의 ORM 사용)을 구축 중이며, 50/s (msg 당 1-2k)라고합시다. 처음에는 이벤트의 "실시간"처리 및 모니터링이 범위에 포함되기 때문에 데이터의 일부를 결정하기 위해 재 다이얼을 사용하여 의미가있을 때이를 삭제합니다. Postgres의 "at rest"저장을위한 이벤트를 포함하여 모든 엔티티를 유지하려고했습니다.웹 앱 백엔드로서의 Redshift?

미래에는 대시 보드 및 기타 기능에 "분석"기능이 필요합니다. 나는 이것을 위해 Amazon Redshift를 사용하고 싶다. 나는 Redshift를 위해 곧바로 직진하고 Postgres를 건너 뛰는 것을 고려했다. 그러나 나는 사람들이 수동적 인 역할을 더해야한다고 말한다. 아마도 SQL 백엔드에서 데이터의 창을 유지하고 Redshift에 정기적으로 보관할 수 있습니다.

내 질문은 :

은 심지어 정상적인 웹 애플리케이션을위한 백엔드로 Redshift에 같은 것을 사용할 수 있나요 아니면 일반적으로 수동적 역할 이상을 재생 하는가? 그렇지 않다면 이벤트 데이터가 시작되도록 Postgres를 충분히 확장 할 수 있다고 생각하는 것이 현실적입니까? 또한 그렇지 않다면 "데이터 및 보관 창"방법이 의미가 있습니까?

편집 여기에 내가 글을 쓰기 전에 본 적이 몇 가지 있습니다 :

답변

3

Redshift (ParAccel)는 매우 오래된 버전의 PostgreSQL을 기반으로하는 OLAP 최적화 DB입니다.

많은 양의 데이터에서 병렬 처리 된 읽기 대부분의 쿼리가 유용합니다. 많은 소규모 트랜잭션, 특히 일반적인 OLTP 작업 부하에서 볼 수있는 작은 쓰기 트랜잭션이 좋지 않습니다.

중간에 있습니다. 데이터 손실 창에 신경 쓸 필요가 없다면 합리적으로 데이터 포인트를 누적하고 적절한 크기의 트랜잭션에서 Redshift에 대한 쓰기 스레드 또는 두 개의 쓰기 배치를 가질 수 있습니다.

데이터 손실 창이 없으며 50+ TPS를 처리 할 것으로 예상되는 경우 Redshift를 직접 사용하지 마십시오. 왕복 비용만으로도 혼란 스러울 것입니다. 로컬 데이터베이스를 사용하거나 주기적으로 회전하는 파일 기반 추가 전용 저널을 사용하십시오. 그런 다음 주기적으로 새로운 데이터를 분석을 위해 Redshift에 업로드하십시오.

다른 몇 가지 좋은 이유 당신은 아마 직접 Redshift에 사용하지 말아야 :

  • OLAP 데시벨과 열 저장소가 종종 디자인 스타 스키마 또는 유사한 구조에 최선을 작동합니다. 이러한 스키마는 삽입 및 업데이트가 많은 테이블을 터치 할 때 OLTP 작업 부하에 대해 느리고 비효율적이지만 분석을 위해 다양한 축을 따라 데이터를 쿼리하는 것이 훨씬 효율적입니다.

  • ORM을 사용하여 OLAP DB와 대화하면 문제가 있는지 묻습니다. ORM은 n + 1 SELECT 및/또는 낭비한 체인 된 왼쪽 조인에 대한 불행한 경향, 몇 가지 큰 것들 대신 많은 작은 삽입을하는 경향 등등과 같이 OLTP 최적화 된 DB에서 상당히 좋지 않습니다. 대부분의 OLAP 최적화 된 DB.

  • Redshift는 고통스럽고 오래된 PostgreSQL을 기반으로하며 제한 사항과 비 호환성이 있습니다. 일반적인 PostgreSQL 용으로 작성된 코드는이 코드와 함께 작동하지 않을 수 있습니다.

개인적으로 나는이 전적으로 ORM을 피할 것 - 나는 그냥 SQLite는 또는 로컬 PostgreSQL을 또는 무언가에 로컬로 데이터를 축적 것, 다중 값 INSERT의를 보내거나 데이터 청크를로드 할 수 PostgreSQL을의 COPY를 사용하여 메모리 버퍼에서받은 것입니다. 그런 다음 적절한 ETL 도구를 사용하여 로컬 DB에서 데이터를 주기적으로 변환하고 이미 분석 서버에있는 데이터와 병합합니다.


지금 방금 말씀 드린 모든 것을 잊어 버리고 앱의 작업 부하를 시뮬레이션하여 벤치 마크를 수행하십시오. 이것이 유일하고 유용한 방법입니다.

+0

세부 정보 주셔서 감사합니다! 나는 로컬 DB 또는 파일 기반 저널 접근법에 조금 불편하지만, 성능 이점을 볼 수 있습니다. 로컬 파일 시스템은 트랜잭션을 저장하는 데 약간 위험합니다. redis와 같은 캐시는 적어도 일시적으로 해당 크기의 크기에 적합하고 거기에서 RS로로드한다고 생각하십니까? – alph486

+0

@ alph486 글쎄, 그것은 당신이 데이터를 잃을 의지와 얼마나 오래 데이터 손실 윈도우를 받아 들일 수 있는지에 달려있다. 지역 저널은 아마도 Redis와 같은 메모리 내장 DB보다 안전 할 것이지만 속도는 느려질 것입니다. –

+0

Gotcha. redis '디스크 지속성과 같이 보이는 것은 최소한 2 초마다 기록하는 추가 전용 저널을 사용할 수 있습니다. 이는 최악의 경우 허용되는 창이라고 생각합니다. 나는 두 곳의 장점을 최대한 살리고 위험을 최소화 할 수 있습니다. 출처 : http://en.m.wikipedia.org/wiki/Redis – alph486