Q&A

  • 원거리 데이터베이스 접속시 속도문제.....
현재 MIS프로그램을 개발/운영 하고 있는데요,
저희 회사 전산실에 DB서버(SQL2000 SERVER)가 있고
중국 청도에 생산기지가 있는데
그곳에 클라이언트 프로그램을 설치하여
운영하고 있습니다.

델파이 5.0에 TQuery로 작성된 데이터베이스 프로그램 입니다.
문제는 워낙 원거리라 db접속 속도가 느린데다
여러 사람이 이용을 하면 프로그램 처리속도가 무진장
느려진다는 것이죠......

접속 방식은 클라이언트 측에 sqlserver의 연결도구인
클라이언트 네트워크 유틸리티에 db의 ip주소를 등록하고,
bde를 설치하고, odbc연결의 사용자DSN을 추가하여
설정 되어 있는 상황입니다.  

vpn을 설치해야 한다는데 그 방법 말고
소프트웨어 적으로 해결 방법을 찾고 싶습니다.

좋은 로직이나 해결방법 이 있으시면
서슴없이 말씀 주시길 기다리겠습니다.
4  COMMENTS
  • Profile
    착한천사 2004.04.05 01:37
    이건 2-Tier로는 답이 나오질 않는 문제인것 같습니다.
    2-tier의 근원적인 해결방법은 3-tier뿐입니다..
    제가 한말이 차갑게 들렸을지 모르지만,
    이것뿐입니다.

    midas를 이용해서 개발을 하여 tcp/ip로 socket통신을 하였다면,
    크게 문제가 되지 않았을테지만,
    (물론, Entera, Tuxido등등을 이용해도 되겠지만, 비용이 시싸고,
    시스템을 새로 설치 혹은 튜닝을 해야 하므로, 많이 번거롭습니다..)
    bde를 이용하고, odbc를 이용하므로
    방법이 생각나지 않습니다.
    C/S 개발(2-tier)는 일반적으로 사내 내트웍에 한정하여 개발하는
    방식을 취하는 것인데,
    원거리 접속에 해당되는 방식으로 사용하시므로,
    db접속 및 응답, sql parsing에 소요되는 시간이 너무 많이
    걸리게 될 것입니다..
    이것은 방법이 없네여..

    다만, 좀 더 효율적으로 하시려면,
    stored procedure 혹은 function을 이용하는 방법밖에
    보이질 않습니다..

    다만, 중국측에 Server를 따로 두시고,
    그쪽 서버에 항상 저장하도록 하신 후
    일정 시간에 Server측에 전송하시는 방식을 취하시든지..

    이것도 저것도 되지 않는다면,
    복제 서버를 염두해 두시는게 어떨지..
    하기사, 복제를 하더라도,
    중국측 Network이 너무 느리다면, 문제겠군여..
    흠..
    뾰족한 방안이 보이지 않는군여..



  • Profile
    너구리 2004.04.03 02:21
    프로그램을 고치면 되겠지요..

    서버프로그램을 만듭니다.

    서버랑 통신을 하면서 미리 정해둔 데이타를 서버로 날려주고

    그안에 작업 내용, IP주소, 사용자ID 등등..넘겨줘야겠지요..

    그래서 서버에서는 그작업들을 미리 돌려놓고 결과 값을 XML 됐던

    그냥 텍스트 파일이 됐던지 간에 서버에 파일을 만들어 놓고..

    파일 주소를 클라이언트에 보내줍니다.

    클라이언트에서는 파일을 받아서 클라이언트 창에 뿌려줍니다.

    예를들어
    insert문이나 update문이라면 실패 여부, 에러메시지, 몇개가 인서트 업데이트
    됐는지 를 담고(아 delete문도...)

    select 문이라면 레코드 형태의 파일을 만들어 클라이언트에서는

    화면에 뿌려줍니다.

    이런식으로 하면 좀 낫지 않을까 싶습니다.

    단점은 규격화된 업무 단위를 나눠야 하며 업무가 추가될시에 번거롭다는

    것이겟지요..그냥 생각은 이렇게 드는데 정말얼마나 좋아질지는 모르겠네요.



  • Profile
    장태원 2004.04.03 02:17
    저의 상황을 참조하여 주세요.

    연결이 중요한게 아니라, 네트웍 속도가 중요합니다.

    저희 회사에서도 생산기지가 중국으로 이전하고, 이전준비하는 공장이

    몇군데 생겨서, 일어나는 문제이긴 하지만,

    결론은 자체 서버를 중국에 설치하는 방법밖에 없습니다. 상하이, 영신등등.

    중국사정상, 네트웍 환경이 최악입니다.

    우리나라 보통 변두리 지방의 네트웍도 못미치는 환경이랍니다.

    중요 데이타의 경우는 한국에 서버를 두고 같이 사용하고 있습니다만,

    속도개선이 문제더군요.

    VPN 사용은 당근 권장 사항입니다.(보안,네트웍접근등 차원에서 봤을때)

  • Profile
    Crazy 2004.04.04 22:34
    너구리님 답변으로 볼때는 연결을 얘기한게 아니라
    쿼리로 데이타를 직접 핸드링했을때는 속도도 저하되고
    그러다보면 끊기거나 등등 나쁜상황이 발생되겠지요..
    그래서 xml 또는 Text 파일등을 받아서 화면에 뿌려주는건 어떨까라는 것이지요..
    제가 볼때도 그럴정도로 네트웍상황이 되면 프로그램을 안쓰는것보다
    못할듯 싶습니다.

    장태원님 생각대로 서버를 중국에도 두고 시간차를 생각하시어 사용자가 적은시간에 업데이트를 받는게 차라리 낳을듯 싶네요...
    실시간 데이타로 꼭 처리를 해야한다면 저렇게 파일형식을 받아서
    화면에 뿌리던지, asp 조금 구현해서 웹상으로 보이는게 낳을듯 싶네요..
    잘되시길 바랍니다.

    • 안명호
    • 2004.04.05 08:04
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 몰파이
    • 2004.04.05 00:45
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 너구리
      2004.04.06 21:05
      virtual -> 가상 abstract -> 추상 가상 메소드이며 추상화 되었다는 얘깁니다. 추상화된 ...
    • 나그네
    • 2004.04.04 23:32
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 박희경
    • 2004.04.04 04:33
    • 0 COMMENTS
    • /
    • 0 LIKES
    • Crazy
      2004.04.04 22:43
      안녕하세요. 예전에 3, 4를 쓸때 3,4 가 충돌나고 4,5 버젼이 충돌날때가 있었습니다. 지금은 5,6을 ...
    • [勳]후니
      2004.04.03 21:56
      가능하고요 주의 사항이라.. 흠.. 구지 있다면.. 같이 폴더에 설치하지 마세요.. 설마 이런 분 없...
    • 이회영
    • 2004.04.03 19:42
    • 1 COMMENTS
    • /
    • 0 LIKES
    • Crazy
      2004.04.04 23:00
      안녕하세요 MDICHILD 로는 없앨수가 없답니다. Normal은 가능합니다.
    • 박수영
      2004.04.03 17:57
      RemoveRows( index, count ); index 는 지울 Row를 넣구요...Count는 몇줄을 지울 건지 넣으면 ...
    • 박희경
      2004.04.04 08:27
    • 김범수
    • 2004.04.03 01:29
    • 4 COMMENTS
    • /
    • 1 LIKES
    • 착한천사
      2004.04.05 01:37
      이건 2-Tier로는 답이 나오질 않는 문제인것 같습니다. 2-tier의 근원적인 해결방법은 3-tier뿐입니다.. ...
    • 너구리
      2004.04.03 02:21
      프로그램을 고치면 되겠지요.. 서버프로그램을 만듭니다. 서버랑 통신을 하면서 미리 정해둔 데이타...
    • 장태원
      2004.04.03 02:17
      저의 상황을 참조하여 주세요. 연결이 중요한게 아니라, 네트웍 속도가 중요합니다. 저희 회사에서도...
    • Crazy
      2004.04.04 22:34
      너구리님 답변으로 볼때는 연결을 얘기한게 아니라 쿼리로 데이타를 직접 핸드링했을때는 속도도 저하되고...
    • CityHunter
    • 2004.04.03 00:45
    • 2 COMMENTS
    • /
    • 0 LIKES
    • [勳]후니
      2004.04.03 03:31
      dx 가 붙어있는 컴포넌트면 퀀텀 그레이드 만든 회사에서 나온 컴포넌트 같은데.. 지금 제가 사용하고 ...
    • CityHunter
      2004.04.03 05:41
      답변 감사합니다. 퀀텀그리드 컴퍼넌트에서 사용된 거군여...TT 암튼 조금이나마 실마리를 찾은거 같군여...
    • 2004.04.05 17:57
      보통의 경우.. 그럴땐 sendmessage를 이용합니다.. sendmessage 를 검색하셔서 이용하여 보심이 좋을듯 싶...
    • 너구리
      2004.04.03 01:21
      shellexcute 함수를 쓰면 함수가 성공하면 핸들이 넘어옵니다. 핸들로 어떻게 해야 될거 같은데 핸들...
    • 너구리
      2004.04.03 01:41
      델마당 팁강좌에 양병규님이 쓰신 강좌(1359번) 다른 프로그램에 속속들이 들어가서 제어를 하는 강좌가...
    • Crazy
      2004.04.04 23:03
      함수가 많아지고 코딩이 많아지면 힘들어질때가 있거든요? 파람받아서 처리하는 편법같은건 어떠세요???
    • hiya
    • 2004.04.02 22:58
    • 4 COMMENTS
    • /
    • 0 LIKES
    • Crazy
      2004.04.02 23:54
      테이블명 앞에 USER 명을 주세요. SELECT A.AAA, B.AAA FROM TABLE A, USERNAME.TABLE B WHERE ----...
    • hiya
      2004.04.03 18:24
      informix DB를 사용하고 있는데, 그래서인지 그 명령어가 먹지를 않네요..;; 다른 게 궁금한게 있는...
    • 너구리
      2004.04.03 20:45
      쿼리안에 인라인뷰를 쓰면 그렇더군요.. 쿼리문을 가지고 TQuery가 이것저것을 하자나요? 아무래도 ...
    • Crazy
      2004.04.04 22:41
      Capability not supported 저 메시지는 너구리님 상황과도 같지만, 또한 데이타베이스간에 서로 문법이 ...
    • 박종의
    • 2004.04.02 21:28
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 박수영
    • 2004.04.02 20:10
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 장태원
      2004.04.02 20:18
      mysql 설치 폴더 들어가면 mysql  프로그램 잇습니다. mysql -u id -p db 이던가? 대충 이런식...
    • 너구리
      2004.04.02 22:32
      매칭을 시키실거면 포인터로 잡으십시오.. EditArray : array[1..2] of ^TEdit 포인터로 잡으면 ...
    • 오익환
      2004.04.02 22:23
      별도로 초기화가 필요치 않습니다. 꼭 초기화 시킬필요가 있다면 EditArray[1]:=Nil; 하면 될거고 ...
    • [勳]후니
      2004.04.02 20:02
      구지.. TEDIT 를 배열로 잡을 필요가 있는건지... 무지 번거로울 껀데요... 초기화는 하나하나 대입...
    • [勳]후니
      2004.04.02 19:55
      엑세스 는 원도우 기본 DB입니다. 델파이에서도 ADO컴포넌트로 지원해주고 있고요.. BDE 이용해서도 ...
    • 김동열
    • 2004.04.02 18:58
    • 3 COMMENTS
    • /
    • 0 LIKES
    • [勳]후니
      2004.04.02 20:06
      이런 방법은 어떨 까요.. EDIT1.TEXT := COPY('00000000' + EDIT1.TEXT, LENGTH(EDIT1.TEXT) + 1, 8); ...
    • 박수영
      2004.04.02 20:05
      FormatMaskText('00000000', edit1.Text); 이렇게 하시면 됩니다
    • 김동열
      2004.04.02 20:35
      FormatMaskText('00000000', edit1.Text); 이 방법두 1이 나오거든요... FormatMaskText 하는 방법은 ...