2016-06-28 2 views
2

Google은 약 500.000 건의 요청을 하루에 처리하는 API 서버를 운영합니다. 우리는 데이터를 분석 할 수 있도록 이러한 모든 규칙을 데이터베이스에 보관하려고합니다. 우리는 같은 것들을 로그 : 대용량 로그 테이블을 저장하는 데이터베이스

  • 얼마나 시간이
  • 날짜와 시간을 가져 갔어 요청을했다

    • HTTP 응답 코드
    • (URL)
    • 에 대한 질문을 받았다 무엇 API 자원
    • 캐시 된 응답 (bool)
    • +++

    우리는 3 개월 동안이 로그를 유지하려고하는데, 그 결과 데이터베이스에 약 45,000,000 개의 레코드가 생깁니다. 레코드가 3 개월 이상 경과하면 레코드가 삭제됩니다.

    이러한 4 천 5 백만 레코드를 SQL 데이터베이스에 저장하는 것도 가능하지만 이러한 데이터를 분석하는 것은 실제로 느립니다. 지난 주 같은 날에 비해 특정 사용자가 오늘 얼마나 많은 요청을했는지와 같은 광범위한 분석을하고 싶습니다. 다른 요일에 비해 오늘 실패한 요청 수는 몇 %입니까? 요청 횟수가 올라가거나 내려가는 추세 다이어그램을보십시오. 주어진 시간에 요청되는 상위 10 개 리소스를 확인하십시오. 당신은 그것을 얻습니다. 우리는 이와 같은 모든 종류의 분석을 할 수 있기를 원합니다.

    이와 같은 분석을 실시간으로 (또는 거의 실시간으로) 수행 할 수 있도록 이러한 로그를 저장할 위치에 대해 조언을 해줄 수 있습니까? 이것에 좋은 수있는 모든 nosql 데이터베이스? 하늘빛? 하늘색 SQL 데이터웨어 하우스라고하는 뭔가가 있는데,이 용도로 사용할 수 있습니까? 필자는 Microsoft Power Bi를 살펴 보았습니다. Microsoft Power Bi는 이러한 데이터를 분석하는 데 유용 할 수 있지만 데이터를 저장하는 위치는 어디입니까?

    누군가 나에게 제안을 해주시면 정말 감사하겠습니다.

  • +1

    왜 SQL Server가 느린 45M 레코드를 관리한다고 쓰셨습니까? 잘 구성된 SQL 서버의 경우, 45M 행은 적은 양의 데이터입니다. –

    +0

    4500 만개의 레코드를 처리 할 수 ​​있습니다.하지만 테스트했지만 모든 종류의 집계를 수행하는 속도가 느립니다 (예 : 사용자 및 resourcerl을 그룹화하고 오류 코드가있는 행을 계산하는 데 오랜 시간이 걸림). 따라서 튜닝에 충분한 시간을 할애하면 일반 SQL 서버로이 작업을 수행 할 수도 있지만이 경우 올바른 도구가 아닌 것 같습니다. – rgullhaug

    +0

    45m 행의 SQL Server의 경우 쿼리를 지원하기 위해 인덱스가 필요합니다 (예 : 외래 키 및 일반적으로 필터링 된 열 (사용자, resourcerl, 오류 코드). Columnstore 인덱스가 최상의 성능을 제공합니다. 예를 들어 표를 분할하는 방법을 살펴볼 수도 있습니다. 날짜. 이렇게하면 ETL 복잡성이 증가하지만 I/O를 줄여 쿼리 속도를 향상시킬 수 있습니다. –

    답변

    2

    Power BI는 잠재적으로 유용한 솔루션입니다. SQL Server Analysis Services 인스턴스는 실제로 "OLAP 데이터웨어 하우스"인 메모리에 저장됩니다. 무료 PBI Desktop 도구로 디자인하고 PBI 웹 사용자를 위해 Microsoft의 클라우드에 게시하면 인프라 요구 사항이 최소화됩니다.

    게시 할 수있는 데이터에는 제한이 있습니다 (아래 링크 참조). PBI는 매우 효과적인 Vertipac 압축을 사용하므로 데이터 세트는 일반적으로 원시 데이터보다 훨씬 작습니다.종종 MB 당 10k - 50k 행을 볼 수 있으므로 45m는 단일 Pro 라이센스로 달성 할 수 있어야합니다. PBI Desktop의 열 목록을 무분별하게 필터링하여 최적화하십시오. 당신이 시간당 새로 고칠 수 있습니다 PBI 프로 라이센스

    https://powerbi.microsoft.com/en-us/documentation/powerbi-admin-manage-your-data-storage-in-power-bi/

    , 최대 8 회 :

    https://powerbi.microsoft.com/en-us/documentation/powerbi-refresh-data/

    건물 SQL 데이터베이스 및 OLAP/SSAS 솔루션을 통해 나에게 좋은 직업이었다 지난 20 년. 시간과 돈이 있다면 여전히 "롤스 로이스"솔루션입니다. 그러나 20 년이 지난 지금도 기술적으로 도전적인 분야이므로 여전히 배우고 있습니다. 아직 그 기술이 없다면 Power BI가보다 생산적인 방법이 될 것입니다.

    +0

    완벽. 고맙습니다. 저는 Power BI로 하루를 보냈습니다. 이제 REST API를 사용하여 Power BI로 실시간 로그를 전송할 수 있습니다 :) 유일한 문제는 평균 일에 약 500.000 개의 레코드를 추가한다는 것입니다. 따라서 아무 것도 삭제하지 않으면 몇 달 후에 10GB 제한에 도달 할 것입니다. 어떻게하면이 문제를 해결할 수 있을까요? 데이터 집합에서 행을 삭제할 수없는 것 같습니다 (유일한 옵션은 모든 행을 제거하는 것입니다). – rgullhaug

    +1

    REST API는 매우 새롭고 "버전 1"느낌을 가지고 있습니다. 이 단계에서 제작 시나리오, 특히 해당 볼륨에 대해서는 권장하지 않습니다. 필자는 Power BI Desktop을 사용하여로드 된 파일의 "Power BI"의 전통적인 경로와 PowerBI 웹에 게시 된 보고서를 상상하고 게이트웨이를 사용하여 새로 고칩니다. Power BI Desktop을 파일 폴더에서 가리키고 발견 된 파일 목록을 필터링하여 이전 내용을 삭제할 수 있습니다. –

    1

    SQL OLTP 데이터베이스에 로그를 저장하는 것이 좋습니다. 로그 테이블의 본질은 트랜잭션 적입니다. 지속적으로 업데이트하고 커밋 속도의 이점을 얻을 수 있습니다.

    언급 한보고 속도 문제는 로그 데이터베이스 상단에 OLAP 데이터웨어 하우스를 구축하여 해결할 수 있습니다. 데이터 모델이 매우 단순 해 구현할 수있는 개발 작업이별로 없을 것 같습니다.

    실시간보고를 얻는 방법은 OLTP 데이터베이스 상단에 보고서를 작성하는 것입니다. 작은 지연으로 생활 할 수있는 경우, 대부분의 장소에서 하룻밤 사이에 큐브를 재구성하여 24 시간 지연에 대한 즉각적인 보고서를 제공합니다.

    개념적 응답에 대한 사과하지만 당신을위한 인프라 설계가 부족하다는 점을 생각하면 Q & 형식으로 갈 수 있다고 생각합니다.

    +0

    OK, 고맙습니다. :) 제가 현재 사용하고있는 SQL 데이터베이스에 로그를 유지하여이 작업을 수행 할 수 있는지 확인한 다음보고를 위해 azure SQL 데이터웨어 하우스에 로그를 전송합니다. 나는 약간의 지연으로 살 수 있지만, 24 시간은 아닙니다. 1 시간 내 최대입니다. 희망적으로 그것이 가능합니다. – rgullhaug

    +0

    물론, 시간 단위 작업을 설정하여 차원 테이블을 업데이트하는 것만으로 충분합니다. –