문제

우리는 레거시 시스템을 대체하는 중입니다. 두 애플리케이션이 모두 실행되는 시간이있을 것입니다. 사용자는 시스템 중 하나를 사용할 수 있으며 문제는 데이터베이스를 서로 동기화 할 수 있어야합니다.

새로운 시스템은 ASP.NET이고 레거시는 VB6입니다. 둘 다 SQL Server 데이터베이스에서 실행 중입니다. 이 시점에서 데이터베이스가 같은 국가는 물론 동일한 서버 룸에 있을지 여부는 확실하지 않습니다.

지금까지 테이블의 두 가지 솔루션은 다음과 같습니다.

  1. 각 컴퓨터에 앉아 다른 응용 프로그램에서 호출되는 웹 서비스.
    • 기본 객체의 기본 클래스 (ES?)에서 저장 메소드를 수정해야합니다. 이것은 침습적이며 전환 할 때 문제가 될 수 있습니다.
  2. 각 데이터베이스를 폴링하고 변경 사항을 해결하고 적절한 업데이트를 적절하게 전달하는 단일 Windows 서비스.

    • 모든 테이블에 마지막으로 수정 된 (DateTime)가 있는지 확인하기 위해 두 응용 프로그램에서 스키마를 변경해야합니다.

두 솔루션 모두 합리적으로 보입니다. 두 솔루션 모두 장단점이 있습니다. 이 비즈니스는 한 시스템을 업데이트하고 다른 시스템을보고있는 사이에 2 초 지연 (!)을 요청했습니다. 그것은 아마도 스트레치 대상이지만 목표로 삼아야 할 것입니다.

제안되었지만 거부 된 다른 사람들은 다음과 같습니다.

  • 데이터베이스 트리거 (Blugrh)
  • Biztalk 또는 기타 버스 (썰매 망치처럼 보이고 전환 솔루션에 비해 너무 복잡합니다)
  • 저장된 모든 절차 수정 (Noooo.)
  • ssis (아직 이것에 대해 충분히 모르겠다)

당신이 가질 수있는 모든 생각에 감사드립니다.

편집 : NB 스키마는 완전히 다릅니다.

도움이 되었습니까?

해결책 4

결국 이것은 웹 서비스로 해결되었습니다. 정말 잘 작동했습니다.

다른 팁

2 초, 그것은 정말 타이트한 타임 라인이며, Windows App 솔루션이 수백 건의 변경 사항이 있거나 한 번에 아무것도없는 경우가 아니라 폴링 시간이 거의 1 초마다 끝나지 않는다고 생각합니다. 2 세 이내에 만들기를 바랍니다.

데이터베이스는 동일한 구조를 사용하고 있습니까? 그렇다면 복제를 구현하는 것을 살펴 봅니다.

편집하다

스키마가 완전히 다르다는 의견과 추가 후에, 나는 실제로 두 개의 운영 세트를 본다고 말해야합니다.

  1. 앱의 데이터 저장 옵션을 수정하여 두 테이블에서 삽입/업데이트/삭제를 만듭니다. 장점 : 공유 할 외부 프로세스가 즉각적으로 없습니다. 단점 : 모든 코드를 수정하고 비활성화하기가 어려워 야합니다.

  2. 변경된 데이터를 동기화하기 위해 언급 한대로 동기화 응용 프로그램을 만듭니다. 장점 : 전송 후 간단히 비활성화 할 수 있습니다. 단점 : 테이블이 많으면 특히 글을 쓰는 것이 매우 복잡합니다. 또한 빠르지는 않지만 2 초는 달성하기가 매우 어려울 것입니다.

개인적으로 나는 어느 시스템을 동시에 사용하는 사용자의 아이디어를 거부 할 것입니다. 사용자 1이 시스템 1에서 레코드 1을 변경하고 사용자 2가 시스템 2에서 다른 방식으로 레코드 1을 변경하면 문제를 어떻게 해결할 것입니까?

또한 사람들이 새 시스템을 사용하도록 요구하지 않으면 그렇지 않을 것입니다. 변화에 대한 저항은 대부분의 조직에서 매우 강합니다.

대신 새 시스템을 롤아웃하고 어떤 이유로 든 되돌려 야 할 경우를 대비하여 모든 시스템을 사용하고 시간별 데이터를 이전 시스템으로 보내야한다고 제안합니다.

2 초 동기화를 얻는 합리적인 방법이 없습니다. 그것은 말도 안되는 요구 사항이며 사업 측면은 불확실한 용어로 말해야합니다.

때로는 Busines 사용자가 불합리한 것을 원할 때 반격해야합니다.

여기서 묘사 한 것은 악몽의 한가운데서 느끼게합니다! 먼저 모든 전환 프로세스 중에 사용자가 2 개의 다른 데이터베이스를 통해 2 개의 다른 응용 프로그램을 통해 모든 데이터를 모두 업데이트 할 수 있다고 생각하는 것이 불가능한 (또는 적어도 매우 비싸다) 모든 사람에게 먼저 분명히해야한다고 생각합니다. ! 나는 2 초 지연에 대해서도 이야기하지 않습니다 ...

나에 따르면 기본 전략은 데이터 업데이트 권한과 가능성을 레거시에서 새로운 앱으로 점차 전환하는 것입니다. 사용자는 양쪽에서 데이터를 볼 수 있지만 앱 중 하나를 통해서만 데이터를 업데이트 할 수 있습니다.

(사고,이 방법은 또한 사용자가 새로운 버전으로 점차 전환하여 @hlgem에 의해 이미 노출 된 예상 및 성가신 저항 문제)

이 규칙이 명확하게 받아 들여지면 다음 단계를 구현할 수 있습니다.

  1. 레거시 데이터베이스에서 새 데이터베이스로 데이터 전송을 허용하는 모든 절차를 설정하십시오. 앞으로 몇 달 안에 몇 번이나 실행해야 할 것 같아요 ...
  2. 데이터 전송을 허용하는 모든 절차 설정 (반대 데이터 전송)
  3. 여기서 당신은 함께 움직일 수있는 것보다 균질 한 테이블 그룹을 식별해야합니다. 각 그룹에 대해 "데이터 전송"절차와 "리버스 전송"하나를 얻을 수있는 방식으로 이전 코드를 병합하십시오.

그런 다음 각 그룹에 대해

  1. 코드를 통해 또는 데이터베이스 수준에 업데이트 제한을 넣으십시오.
  2. "데이터 전송"절차를 실행하십시오
  3. 새 데이터베이스에서 트리거로 "리버스 전송"절차를 구성하십시오.

전송할 수있는 첫 번째 종류의 데이터는 외래 키가 포함되지 않은 목록이 될 것 같습니다.

이런 식으로 작업하면 점차적으로 당신이 가진 상황에서 전환 할 것입니다.

  • 레거시 앱 + 읽기/쓰기 새로운 앱을 읽습니다

에게

  • 읽기 전용 레거시 앱 + 새 앱 읽기/쓰기.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top