현재 10 개의 노드가있는 클러스터에서 mysql에 대해 java 프로젝트를 작성하고 있습니다. 이 프로그램은 데이터베이스에서 일부 정보를 가져 와서 계산을 한 다음 일부 데이터를 다시 데이터베이스로 푸시합니다. 그러나 테이블에는 수백만 개의 행이 있습니다. 작업을 분할하고 클러스터 아키텍처를 활용할 수있는 방법이 있습니까? 다른 노드에서 멀티 스레딩을 수행하는 방법은 무엇입니까?mysql에서 작업 속도 향상
답변
데이터베이스 서버의 저장 프로 시저에서 계산을 수행하고 중간 계층에 수백만 개의 행을 전달하는 방법을 생각해 봅니다. 당신은 많은 바이트를 유선에 저장할 것입니다. 계산의 본질, 스키마, 인덱싱 등에 따라 데이터베이스 서버가 멀티 스레딩에 의존하지 않고도 계산을 수행 할 수있는 능력을 갖추고 있음을 알 수 있습니다.
내가 틀릴 수도 있지만 프로토 타입을 볼 가치가 있습니다.
처리하려는 테이블 (A)에 1,000 만 개의 행이 있다고 가정합니다. 데이터베이스에 테이블 B를 작성하여 노드가 처리하는 행 세트를 저장하십시오. 따라서 Java 프로그램을 다른 노드가 처리 한 마지막 행을 먼저 가져 오는 것과 같은 방식으로 작성한 다음 다른 노드에 처리 할 행의 범위를 알리는 동일한 테이블의 항목을 추가합니다 (이를 결정할 수 있습니다 번호). 여기서는 각 노드가 한 번에 1000 개의 행을 처리 할 수 있다고 가정합니다. 노드 1은 테이블 B를 가져와 비어있는 것으로 판별합니다. 그런 다음 노드 1은 A의 기본 키가 < = 1000이 될 때까지 처리 중임을 알리는 행 ('Node1', 1000)을 삽입합니다 (테이블 A의 기본 키가 숫자이고 오름차순 임). 노드 2가 오면 1000 개의 기본 키가 다른 노드에서 처리됩니다. 따라서 다른 사람에게 1001에서 2000 사이의 행을 처리 중임을 알리는 행 ('Node2', 2000)을 삽입합니다. 표 B에 대한 액세스는 동기화되어야합니다. 즉 한 번에 하나만 작업 할 수 있습니다.
가능한 경우 두 테이블을 피할 것이므로 현재 테이블에 몇 가지 추가 추적 필드를 사용하는 것이 좋습니다. 그럴 수 없다면 임시 테이블이 있습니다. – NeuroScr
mysql 서버가 하나 뿐이므로 innodb 엔진을 사용하여 업데이트시 테이블 잠금을 줄이십시오.
또한 더 많은 쿼리를 실행해야하는 경우에도 가능한 한 간단하게 쿼리를 유지하려고합니다. 이렇게하면 쿼리 캐시 적중 가능성이 높아질뿐만 아니라 백엔드의 모든 작업 부하를 줄이고 쿼리 일치를 줄이고 프론트 엔드 (리소스가 많은 곳)로 작업 할 수 있습니다. 또한 행 잠금이 유지되는 시간을 줄이므로 경쟁이 줄어 듭니다.
제안 된 Gearman 솔루션이이 작업에 적합한 도구 일 것입니다. mysql에서 클러스터로 일괄 처리를 투명하게 다시 오프로드 할 수있게 해줍니다.
각 컴퓨터에서 mysql을 사용하여 샤딩을 설정할 수 있지만 설정 시간, 유지 관리 및 데이터베이스 액세스 레이어 변경은 기어 솔루션에 비해 많은 작업 일 수 있습니다. 실험적인 스파이더 엔진을 보면서 여러 개의 mysqls를 조화롭게 사용할 수도 있습니다.
계산이 매우 복잡한 경우가 아니라면 대부분의 시간은 MySql에서 데이터를 검색하고 그 결과를 MySQl로 다시 보냅니다.
단일 데이터베이스를 보유하고 있으므로 응용 프로그램 측면에서 병렬 처리 나 클러스터링을 수행 할 수 없습니다.
그렇다면 모든 것이 가능한 경우 순수한 SQL에서 업데이트를 수행하거나 저장 프로 시저를 사용하여 모든 처리가 MySql 서버 내에서 이루어지며 데이터 이동이 필요하지 않도록하는 것이 가장 좋습니다.
이 속도가 충분히 빠르지 않으면 데이터베이스를 여러 인스턴스로 분할하고 일부 애플리케이션 키를 기반으로 데이터를 분할하는 스키마가 필요합니다.
- 1. 업데이트 작업 속도 향상
- 2. MySQL에서 DISTINCT 쿼리 속도 향상
- 3. Visual Studio에서 배포 작업 속도 향상
- 4. PHP의 속도 향상
- 5. iPad에서 CSS3 속도 향상
- 6. django 서버 속도 향상
- 7. 데이터베이스 쓰기 속도 향상
- 8. GTK 트리보기 속도 향상
- 9. 파일 쓰기 속도 향상
- 10. 데이터베이스 속도 향상
- 11. iPhone 애니메이션 속도 향상
- 12. 쿼리 속도 향상 방법
- 13. 이미지 표시 속도 향상
- 14. GUI 응답 속도 향상
- 15. jasperreports의 속도 향상
- 16. PHP 속도 향상 방법
- 17. FCKEditor의 속도 향상
- 18. 웹 서비스 속도 향상
- 19. JAXBContext 초기화 속도 향상?
- 20. 속도 향상 계산?
- 21. 포럼 변환 속도 향상
- 22. ASP.NET 사이트의 개발 속도 향상
- 23. MySQL에서 행을 계산하는 속도
- 24. Drupal 사이트 속도 향상 팁
- 25. AS2 속도 및 용이성 향상
- 26. 업데이트 SQL 쿼리 속도 향상
- 27. GCC/Xcode 속도 향상 제안?
- 28. 구문 분석 알고리즘 속도 향상
- 29. Android에서 구문 분석 속도 향상
- 30. OpenXML 값 검색 속도 향상
그는 단지 하나의 mysql 서버를 가지고있는 것처럼 들리므로 문제를 분산시키기 위해 클러스터를 사용하는 대신 단일 리소스에 병목 현상이 발생합니다. – NeuroScr