다음은 직장에서 솔루션을 연구하는 시나리오입니다. 우리는 네트워크에서 발생하는 이벤트를 저장하는 테이블을 포스트그레스에 가지고 있습니다. 현재 작동하는 방식은 네트워크 이벤트가 발생할 때 행을 삽입하는 동시에 특정 타임 스탬프와 일치하는 오래된 레코드를 삭제하여 테이블 크기를 약 10,000 개의 레코드로 제한합니다. 기본적으로 로그 회전과 비슷한 개념입니다. 한 번에 수천 개의 네트워크 이벤트가 발생하므로 트랜잭션 속도가 너무 높아서 성능 저하가 발생합니다. 서버가 충돌하거나 매우 느려지는 경우 고객은 테이블 크기를 최대 100 만 개까지 유지해야합니다. 이는 성능 저하를 가속화 할 것이고 (특정 타임 스탬프와 일치하는 레코드를 삭제하지 않으면 안되기 때문에) 공간 관리 문제가 발생합니다. 간단한 JDBC를 사용하여 테이블을 읽고 쓰는 중이다. 기술 커뮤니티가이 테이블에서 삽입 및 삭제를 처리하는 더 나은 방법을 제안 할 수 있습니까?효율적인 데이터베이스 작업
답변
필자는 아마도 10x 총 원하는 크기의 파티션 테이블을 사용하여 최신 파티션에 삽입하고 가장 오래된 파티션을 삭제할 것이라고 생각합니다.
http://www.postgresql.org/docs/9.0/static/ddl-partitioning.html
이 쿼리보다 훨씬 작고 삭제 "오래된이 떨어지고"에 부하한다.
업데이트 : Nos의 의견에 동의하지만 삽입/삭제가 병목 현상이 아닐 수 있습니다. 어쩌면 먼저 조사를 해보십시오. 당신이 시도 할 수
하루 24 시간마다 1 파티션으로 24 개의 파티션으로 해결할 것입니다. 그리고 TRUNCATE가 VACUUM을 필요로하지 않기 때문에 비울 수있는 파티션에서 TRUNCATE를 사용하십시오. –
빠르고 도움이되는 답변에 감사드립니다. 지난 주에 막 시작 했으므로 DB 스키마, 인덱스 및 쿼리에 대해 더 자세히 조사하고 병목 현상이 될 수있는 부분에 대해 자세히 조사하고 곧 모든 세부 정보를 게시합니다. – alwaysLearning
어떤 것들은 - 로그에
- 쓰기, 별도의 배치 PROC 있습니다. 테이블에 써라.
- 쓰기를 그대로 유지하거나 정기적으로 또는 트래픽이 적을 때 삭제합니다.
- 버퍼에서 실제 db 쓰기가 발생하면 버퍼/캐시에 쓰기를 수행하십시오.
몇 가지 일반적인 제안 -
당신은 타임 스탬프에 따라 삭제하는 때문에- , 타임 스탬프 색인되어 있는지 확인하십시오. 카운터/자동 증가 된 rowId (예 : id < currentId -1000000)를 삭제할 수도 있습니다.
- 또한 JDBC 배치 쓰기는 개이며 개별 행 쓰기보다 빠릅니다 (쉽게 속도 향상이 가능합니다). 쓰기를 버퍼링 할 수 있다면 한번에 100 행을 일괄 적으로 쓰면 커다란 도움이 될 것입니다.
- 1. 데이터베이스 작업
- 2. 효율적인 일괄 업데이트 레일 데이터베이스
- 3. 간단한 관계형 데이터베이스 - 효율적인 질의
- 4. 사진 및 데이터베이스 작업
- 5. Access 데이터베이스 작업
- 6. MVC 패턴 데이터베이스 작업
- 7. 데이터베이스 작업 모범 사례?
- 8. 데이터베이스 호출 작업 누군가에
- 9. 테이블을 포함하는 데이터베이스 목록을 얻는 효율적인 방법
- 10. 효율적인 프로세서 사용으로 예약 된 작업 배포
- 11. 효율적인 데이터베이스 구축에 대한 접근 방식
- 12. 가장 효율적인 psql 데이터베이스 이동 방법
- 13. 효율적인 방법으로 여러 데이터베이스 연결 사용
- 14. 레코드 삽입 측면에서 효율적인 데이터베이스 액세스
- 15. 가장 효율적인 데이터베이스 날짜 저장 방법은 무엇입니까?
- 16. 효율적인 방법으로 db2 데이터베이스 행을 업데이트하십시오.
- 17. 효율적인 데이터베이스 모양에 대한 일반적인 느낌은 무엇입니까?
- 18. 데이터베이스 작업 모범 사례 팀
- 19. WPF 및 SQL 데이터베이스 작업
- 20. 방지 Linq에 실제 데이터베이스 작업
- 21. 효율적인 SQL 트랜잭션 사용
- 22. ASP.NET - Oracle 9i 데이터베이스/데이터베이스 저장 프로 시저 작업
- 23. 젠드 프레임 작업 데이터베이스 연결 및 구성
- 24. Wicket에서 AJAX 및 데이터베이스 작업 구현
- 25. 데이터베이스 개체와 관련된 작업 단위는 무엇입니까?
- 26. Xcode에서 SQL 데이터베이스 가져 오기 및 작업
- 27. LINQ to XML을 사용하여 데이터베이스 작업
- 28. 데이터베이스 수정을위한 스크립트 또는 작업 만들기
- 29. php 및 mysql help, 다중 데이터베이스 작업
- 30. 데이터베이스 상태 변경을위한 작업 스케줄러 만들기
여기에 크기에 숫자가 있습니까? 10 만 건 또는 2 백만 건의 기록 자체는 거의 없습니다. 매 초 200 만 개의 기록이 파열되면 시간이 지남에 200 만 개가 넘는 것은 아닙니다. 또한 인덱스를 포함하여이 테이블에 대한 DB 스키마를 제공하고 개선을 제안하는 데 도움이되는 일반적인 쿼리를 제공하십시오. – nos