2010-04-19 6 views
1

저는 스키마가 다른 2 개의 MySQL 데이터베이스를 설정하려고합니다. 하나는 정규화되고 다른 하나는 더 빠른 읽기를 위해 평평합니다. 두 DB 모두에 저장되는 정보는 동일하지만, 다른 디자인 접근법 때문에 표현이 분명히 다릅니다.이 데이터베이스 시나리오를 설계하는 가장 좋은 방법은 무엇입니까?

정규화 된 버전에서 내 초라한 버전으로 정보를 실시간으로 동기화하는 강력한 솔루션을 찾아야합니다.

EDIT : 동기화는 정규화 된 DB에서 플랫 DB에만 있어야합니다. 플랫 화 된 DB는 정규화 된 테이블에서 평평하게 된 테이블에 쓰지 않습니다.

+0

나는 이득을 정말로 여기에서 이해하지 못한다. 두 번째 DB에서 읽기 및 쓰기가 10 배 더 빠르더라도 평균 트랜잭션 시간을 평균 10 % 늘려 동기화합니다. – maxwellb

+0

그건, 그리고, 만약 당신의 동기화가 양방향이고, 당신은 다른 클라이언트가 각 DB와 거래를하고있는 것 같으면, 그 쌍은 단지 가장 느린 DB만큼 빠를 것입니다. – maxwellb

+0

벤치 마크 테스트를 통해 DB 디자인으로 인해 속도가 느려지는 것으로 확인 되었습니까? –

답변

1

접근 방식은 읽기 관점에서는 좋지만 쓰기 관점에서는 적절하지 않습니다. 문제는 정규화 된 테이블에서 역 정규화 된 테이블보다 역순환하는 것이 더 쉽다는 것입니다. 쓰기 작업에서 속도가 빨라지려면 두 테이블을 동시에 쓰고 비표준 테이블 만 읽으십시오. 이것은 읽기에 대한 최신 정보를 항상 제공한다는 장점이 있습니다.

이 방법으로 쓰는 것이 불가능한 경우 새 레코드를 가져 와서 테이블을 비정규화할 수 있도록 일부 정규화 된 테이블에 "더티 플래그"를 넣어야합니다. 그런 다음 정규화 된 테이블에서 비정규 화 테이블을 주기적으로 업데이트하는 저장 프로 시저 집합이 필요합니다. 이를 수행하는 방법에 대한 아이디어는 다음을 참조하십시오. http://www.xaprb.com/blog/2007/08/29/how-to-notify-event-listeners-in-mysql/

0

비정형 화 된 데이터가 읽기 전용으로 사용되며 실시간이 아닌 경우 사용자가 취하는 접근 방식은 많은 의미가 있습니다.

거의 실시간 성능을 허용하는 로그 전달 및 트리거를 기반으로하는 여러 가지 솔루션이 있습니다. mysql에서 사용할 수 있는지는 알 수 없습니다. 이러한 솔루션은 항상 캐치와 함께 제공됩니다 - 무료 점심입니다.

RDBMS 게임의이 시점에서 두 가지를 모두 얻을 수있는 방법은 없습니다. 일반적으로 빠른/삽입 OLTP DB 및 지연 개발 - 실시간 OLAP 데이터베이스, 하루에 한 번 또는 채워집니다. 이는 일반적으로 모든보고 요구 사항의 99 %를 충족시킵니다.

관련 문제