2017-09-25 1 views
0

를 설정하려면이IO가 부여 데이터베이스 상태

public void do(RequestObject request, Callback<RequestObject> callback); 

경우 요청이 처리 될 때 Callback가 호출됩니다. 한 클라이언트는 데이터베이스에 요청 상태를 설정해야합니다. 클라이언트는 일부 항목을 가져와 위 메소드에 전달하고 콜백은 상태를 설정합니다.

항목 수가 적고 입출력이 느린 경우에는 정상적으로 작동합니다. 하지만 이제 IO는 속도가 빨라지고 상태는 데이터베이스에 자주 기록됩니다. 이로 인해 내 데이터베이스 (MySQL)가 많은 디스크 읽기 쓰기 호출을 수행하게됩니다. 내 디스크 사용량이 지붕을 통과합니다.

저는 상태의 설정을 집계 할 생각 이었지만 신뢰할 수없는 권력은 그럴듯한 해결책이 아닙니다. 어떻게 이것을 다시 디자인해야합니까?

프로세스가 나는 값을 삽입 및 업데이트가있을 때, 나는 항목을 가져오고 항목을 업데이트 시작 EDIT

. @ user2612030 귀하의 질문에 나를 믿어, 최대 절전 모드를 사용하는 것은 그것이 필요한 것보다 더 많은 읽기를 일으킬 수 있습니다.

디스크 드라이브를 SSD로 업그레이드 할 수는 있지만 그렇게하는 것이 좋습니다. 나는 비늘의 해결책을 원한다.

+0

상태를 저장 한 후 사용 사례는 무엇입니까? 얼마나 빨리 쿼리해야합니까? – yegodm

+0

나는 그것을 쿼리하여 작업의 상태를 확인한다. 대량 작업이며 클라이언트는 상태를 확인해야합니다. –

+1

결국 상태 값을 변경할 수 있습니까? 클라이언트가 상태를 설정하지만 데이터베이스에 즉시 저장되는 것이 아니라 영구적 인 디스크 대기열과 같은 일부 빠른 내구성 스토리지에 저장 될 수 있습니다. 인스턴스가 실행되는 동안 메모리에서 /에서 상태를 캐시하고 제공 할 수 있으며 대기열에서 백그라운드로 데이터베이스를 대량 업데이트 할 수 있습니다. 다시 시작하면 큐에서 이벤트를 재생하여 데이터베이스와 캐시를 동기화해야합니다. – yegodm

답변

1

SSD가 좋은 출발점이기 때문에 더 많은 RAM이 MySQL에도 도움이됩니다. 쓰기를 제거 할 수는 없지만 충분한 RAM (및이를 사용하도록 구성된 MySQL!)이 있으면 실제 읽기가 거의 없어야합니다. 기본 구성을 사용하는 경우 조정하십시오. 예를 들어 https://www.percona.com/blog/2016/10/12/mysql-5-7-performance-tuning-immediately-after-installation/을 보거나 MySQL 메모리 구성을 검색하십시오.

디스크를 추가하고 여러 컨트롤러가있는 여러 디스크에 쓰기를 분산시킬 수도 있습니다. 그것도 조금 도움이 될 것입니다.

상태 값을 기록하는 방법을 모른 채 좋은 조언을하는 것은 어렵습니다. 삽입물이나 업데이트? 얼마나 많은 기록이 있습니까? 데이터 모델? 그러나 실제로 확장하려면 어떻게 든 데이터를 분할해야합니다. 그렇게하면 한 서버가 한 범위의 데이터를 처리 할 수 ​​있고 다른 서버 데이터는 다른 범위의 서버 데이터를 처리 할 수 ​​있습니다.

응용 프로그램 코드에서 샤딩을하지 않는 한 MySQL을 설정하는 것이 중요하지 않은 쓰기가 많은 응용 프로그램의 경우. 복제 기능이있는 대부분의 솔루션은 대부분 읽기 전용 응용 프로그램에 가장 적합합니다. 예를 들어 MongoDB와 같은 NoSQL 데이터베이스를 살펴볼 수도 있습니다.이 데이터베이스는 처음부터 쓰기를 분산하도록 설계되었습니다. MongoDB는 다른 문제 (궁극적 인 일관성)를 가지고 있지만 확장 가능한 쓰기를 제공 할 수 있습니다.