2014-02-10 2 views
2

필자는 260 개의 열이있는 레거시 테이블을 가지고 있습니다 : 4 개는 전역 값을 저장하고 256 개 열은 매개 변수를 저장합니다. 512 개의 값을 저장하기 위해 테이블을 확장해야합니다.레거시 데이터베이스에 500 개의 키 - 값 쌍을 저장해야합니까?

최적의 솔루션은 3 개의 열 (id, value, parent_id)만으로 하위 테이블을 만들고 필요한만큼의 매개 변수를 저장하는 것입니다. 그러나 이것은 코드의 상당한 재 작성을 필요로하고 나는 성능에 대해 확신하지 못한다.

두 번째로 많은 값을 저장하려면 테이블을 확장하면됩니다 (넓게 만듭니다). 코드에 대한 최소한의 변경을 구현해야하므로이 방법이 더 안전한 솔루션입니다. 또한 새로운 테이블은 앞으로 4 년 동안 수정되지 않을 것입니다 (따라서).

조금 더 많은 정보를 제공하기 위해 시스템에 단위 테스트가 없으므로 코드를 수정하지 않으므로 ORM을 사용하지 않습니다. 따라서 코드 작성 및 읽기시 많은 변경 작업이 필요합니다. DB)와 PM은 첫 번째 해결책이 기존 해결책보다 느릴 수도 있다고 우려하고있다. 테이블에 10000 개의 행을 저장할 수 있으므로 제안 된 자식 테이블은 약 5 백만 행이됩니다.

제안 된 디자인이 실제로 현재 디자인보다 빠르다는 것을 증명할 수 있습니까? 설계 고려만으로는 충분하지 않습니다 (현재 시스템이 작동합니다 ...). 제안 된 디자인으로 옮길 다른 좋은 (또는 나쁜) 이유가 있습니까?

+0

하위 테이블 아이디어를 수행하십시오. 500 값은 성능에 많은 영향을 미치지 않습니다. 시작시 HashMap에서 캐시를 많이 변경하지 않으면 캐싱을 고려하십시오. – Bohemian

답변

2

데이터베이스웨어 하우징과 스노우 플레이 킹 사이의 키를 찾고 있습니다.

많은 읽기 대 처리해야하는 테이블 인 경우 많이 쓰면 다른 것에 집중할 수 있습니다.

"자식 테이블"로 분할 한 후 데이터베이스에 항목을 삽입하면 이제 1 대신 512 개의 삽입이 사용됩니다. 그러나 단일 매개 변수를 편집하면 하나의 작은 영역이 수정되고 다른 511 영역에는 영향을 미치지 않습니다.

개인적으로 512 열이 약간 과도하다고 생각하지만, "필요한 값이 무엇이든간에"익명 테이블 "이 아닌 논리적 테이블로 바뀔 수있는 다른 관계가 있는지 생각해 봅니다. .

모든 데이터베이스 항목을 사용하면 가장 좋은 방법은 입니다. 오직 테이블이 가장 자주 사용되는 방법을 알고 있고 1M 행을 삽입하고 1M을 읽는 테스트를 작성하는 것은 매우 쉽습니다.

+0

답변 해 주셔서 감사합니다. 나는 가능할 때마다 약간의 테스트를 할 것입니다. – MicheleFG

관련 문제