2012-03-11 7 views
1

기존 ERP 시스템 (WinMagi)과 상호 작용할 웹 응용 프로그램을 설치해야합니다. ERP는 기본적으로 xBase (FoxPro) 데이터베이스의 프런트 엔드입니다. 데이터베이스는 사내 서버에 있습니다. 내가 알고있는 한 ERP는 API가 없지만 EDI 모듈을 통해 구매 주문서 등을 수락 할 수 있습니다. 웹 응용 프로그램은보고를 위해 온라인 주문 및 쿼리 데이터를 받아 들일 수 있어야합니다. 지금까지xBase 기반 ERP를 웹 응용 프로그램에 어떻게 연결합니까?

내 계획 :

  1. 는 VM 호스트 구름에 SQL 서버 인스턴스에 xBase를 DB를 동기화 할 수 있습니다.
    • (ERP에서 편도 -> SQL 서버)가 ERP 및 웹 응용 프로그램 사이의 인터페이스로
  2. 사용이 동기화 과정.
  3. EDI를 사용하여 구매 오더를 ERP로 다시 푸시합니다.
    • 내 생각은 데이터 동시성 관점에서 제어 및 승인 된 (ERP) 인터페이스를 통해 ERP의 데이터를 작성하거나 업데이트하는 것이 더 안전하다는 것입니다.

질문/우려 :

  1. xBase를 DB에서 SQL DB를 업데이트하는 가장 좋은 방법은 무엇입니까? 이 작업을 수행 할 수있는 기존 라이브러리가 있습니까?
  2. 동기화 중에 xBase DB가 잠길 수 있습니까? 아니면 실제 ERP에 문제가 있습니까?
  3. 동기화하는 동안 데이터 동시성/무결성 문제를 방지하려면 어떻게합니까?
  4. 이 시스템은 웹 응용 프로그램에 실시간 데이터를 제공하지 않습니다. 이것으로 인해 어떤 종류의 문제가 발생할 수 있습니까?
  5. 이러한 종류의 프로젝트에서 다른 언어보다 한 언어를 더 선호해야합니까? 내 계획은 Java/Hibernate MVC를 사용하는 것이 었습니다.

아마도이 잘못된 방식으로 가고 있을까요? 내 웹 앱과 xBase DB를 직접 인터페이스하는 것이 더 낫지 않습니까? 이 접근 방식으로 즉시 떠오르는 문제 중 하나는 사무실과 클라우드 기반 VM 간의 네트워킹 문제와 잠재적 인 보안 취약성이 ERP를 인터넷에 직접 개방한다는 것입니다.

조언이나 제안 사항을 보내 주시면 대단히 감사하겠습니다 !! 미리 감사드립니다.

UPDATE - 9월 3일

2,012 어떻게 현재의 데이터가 (이 동기화 아니다)을 복사하고 있어요 - 야간 실행 :

  1. 사무실 복사 필요한 DBFS의 리눅스 박스 ERP 서버의 읽기 전용 공유에서 로컬 스토리지로.
  2. DBF는 Dave Burton의 환상적인 기능을 사용하여 CSV로 변환됩니다. dbf2csv perl script
  3. 결과 CSV는 원격 VM과 rsync됩니다.데이터가 약간만 변경되어 매우 빠릅니다.
  4. rsync가 완료되면 원격 VM은 프로덕션 DB에 대한 mysqlimport를 수행합니다. ERP는 네트워크 액세스와 같은 방법으로 손상 될 수없는이 방법

장점은 읽기 전용입니다.

  • 데이터를 동기화하기 위해 사용자 지정 논리를 구현할 필요가 없으므로 원격 VM에서 데이터가 잘못 될 염려는 없습니다.
  • 데이터 복사가 야간에 실행되므로 런타임이 중요하지 않습니다.
    • 레코드 당 약 20-30 개의 필드가있는 1 백만 개의 레코드에는 현재 실행 시간이 약 7 분입니다.
    • 가장 긴 단계는 DBF 복사 및 CSV 변환입니다.
  • 단점

    • DBFS는 전체, 모든 시간에 복사 할 수 있습니다.
    • DBF는 매번 전체로 변환되어야합니다.
    • 복사중인 테이블은 mysqlimport 중에 잠긴다. 밤에는 import가 실행되고 mysqlimport는 약 20 초 밖에 걸리지 않기 때문에 이것은별로 문제가되지 않습니다.
    +0

    Talend, CloverETL 또는 Pentaho와 같은 ETL 도구가 적합하다고 생각합니다. 이렇게하면 바퀴를 다시 발명하지 않고 동기화를 제어 할 수 있습니다. – Andrew

    +0

    @ Andrew에게 제안 해 주셔서 감사합니다. 나는 그것을 들여다 볼 것이다. 다른 질문/염려 사항에 대해 다른 아이디어가 있습니까? xBase DB가 잠겨져 사내 ERP에 문제가 발생하는지 알고 있습니까? – max

    +0

    xBase DB에서 선택하는 경우 NOLOCK 문을 사용할 수 있어야합니다. 이것은 물론 "더러운 읽기"이며 몇 가지 단점이 있지만 선택 사항입니다. – Andrew

    답변

    1
    1. 는 비주얼 폭스 프로 3.0 사용하는 경우 또는 그 이상, 당신은이 SQL 서버 DB에 연결을 만들 데이터베이스 컨테이너에 내장 사용할 수 있습니다. 그런 다음 .DBC의 뷰는 SQL Server 테이블을 읽고 업데이 트하는 무거운 작업을 수행합니다.

    2. Foxpro 테이블을 반복하고 행을 읽고 SQL Server DB를 업데이트하는 루틴을 구상합니다. 따라서 Foxpro 테이블을 잠그면 안됩니다. 이를 확인하기 위해 먼저 DBF를 커서로 쿼리 한 다음 커서를 통해 루프 할 수 있습니다.

    3. 동시성 검사를 수행하는 절차를 추가하는 것이 좋습니다.

    웹 응용 프로그램에 라이브 FoxPro 데이터를 저장하는 또 다른 옵션은 SQL Server에서 Foxpro 데이터베이스에 연결된 서버를 만드는 것입니다. 그렇게하면 Foxpro 데이터에 실시간으로 액세스 할 수 있습니다.

    +0

    감사합니다. @ 제리. Visual Foxpro를 사용할 길을 가고 싶지 않습니다. 그래도 링크 된 SQL Server에 대한 아이디어를 좋아합니다. – max

    1

    저는 현재 비슷한 일을하고 있습니다. SQL Server를 실행하는 호스트 된 원격 VM에있는 웹 응용 프로그램을 통해 FoxPro 기반 시스템에서 인보이스 트랜잭션을 만들어야합니다.

    나는 내가하고있는 일에 기초하여 첫 번째 질문에 답할 것입니다 - 당신이 스스로에게 도움이되는지 여부를 결정할 수 있습니다!

    xBase DB에서 SQL DB를 업데이트하는 가장 좋은 방법은 무엇입니까? 이 작업을 수행 할 수있는 기존 라이브러리가 있습니까?

    정말 공유 라이브러리를 찾지 못했습니다. 내가 한 일은 (다소 단순화 된)이었다

    1. 추가 나는에 변화를 감지 할 다른 필드를 기반으로 CRC32 값을 보유하고있는 ERP 측 트랜잭션 테이블에 필드 (예를 들어, 트랜잭션 밸런스) .

    2. ERP 측 트랜잭션 테이블을 타이머로 스캔하고 일부 필드를 기준으로 CRC32 값을 계산 한 다음이를 포인트 1의 새 필드에 저장된 마지막 CRC32 값과 비교합니다. 무언가가 변경되고 거래를 다시 보내야합니다. 이 EXE는 DBF 파일 액세스를 단순화하기 위해 VFP로 작성되었으며 Windows 서비스로 실행됩니다. 시간이되면 C#에서 다시 수행됩니다.

    3. 아직이 EXE에서 새로운 또는 변경된 트랜잭션 목록이 있으면이를 JSON으로 변환합니다. 내 자신의 JSON 함수를 굴렸으나 [Sweet Potato Software] [1] 또는 다른 많은 Craig Boyd를 사용할 수 있습니다. 트랜잭션과 연관된 PDF 문서가있을 수 있습니다 (인코딩되어 JSON에 임베드 된 경우).

    4. 표준 Windows WinHTTP 라이브러리 (WinHttp.WinHttpRequest.5.1)를 사용하는 클래스를 사용하여 JSON을 원격 사이트의 웹 서비스에 보냅니다. 원격 웹 서비스는 기본적으로 Java를 실행합니다. 모든 것을 디코딩하고 SQL Server를 업데이트합니다.

    +0

    제안에 감사드립니다. @Alan. 아마도 비슷한 것을 구현할 수 있지만 ERP 테이블을 변경하는 것이 바람직합니다. 내 구현에 대한 내 질문에 업데이 트를 참조하십시오. – max