문제

추가하려고합니다 IMAP 이메일 통합 웹 애플리케이션 중 하나 (ASP.NET / SQL Server). 나는 이미 a를 사용하고 있습니다 상업 도서관 가장 중요한 IMAP 기능을 노출시킵니다. 폴더 목록 가져 오기, 메시지 헤더 가져 오기, MIME 메시지 가져 오기 등).

IMAP 서버에서 이메일 데이터를 "라이브"하는 것은 매우 잘 작동합니다. 하지만 여기에는 어려운 작업이 있습니다. 이메일/폴더를 유지해야합니다. 캐싱 SQL 데이터베이스는 IMAP 서버와 동기화되었습니다 (다른 기준을 적용하는 데이터를 보여 주어야합니다).

당사의 데이터베이스 스키마에는 본질적으로 "폴더"와 "이메일"테이블이 포함되어 있습니다. "이메일"테이블에는 주로 "FromAddress", "FromName", "Issread", "Isanswered", "Isforwarded", "Hasattachments"등의 헤더 정보가 포함됩니다.없이 이메일 내용 또는 첨부 파일).

두 가지 주요 시나리오를 고려해야합니다.

  1. 모든 메시지를 처음으로 받기 (또는 사용자가 폴더를 재구성 한 후)
  2. 새/최근 메시지 받기

성능이 주요 설계 기준이라는 점을 고려할 때 메일 서버 및 데이터베이스 서버를 최신 상태로 유지하기위한 좋은 동기화 전략은 무엇입니까? 사용자가 이전 이메일을 이동하거나 삭제 한 경우).

감사!

도움이 되었습니까?

해결책

라이브러리의 기능 목록에서 :

더 나은 고유 한 지원 : 메시지의 고유 한 ID를 요청하기 위해 더 많은 옵션을 추가했습니다. 이제 IMAP 서버로의 리턴 트립을 위해 메시지의 데이터 테이블에서 고유 한 것을 반환 할 수 있습니다.

그리고:

  • 새 메시지 만 검색합니다
  • 신고 된 메시지를 검색합니다
  • 읽은대로 표시/표시를 표시합니다

마치 라이브러리에 SQL 서버를 동기화하는 데 필요한 모든 지원이있는 것처럼 보입니다. 프로그래밍 방식으로 메시지를 읽은대로 표시 할 수 있으며 라이브러리는 새 메시지 만 검색을 지원합니다. 두 번째 아이템을 처리합니다.

귀하의 전략은 솔루션의 작동 방식에 부분적으로 달려 있습니다. 질문을 읽은 경우 사용자는 IMAP 서버에서 이메일을 관리하고 SQL 서버는 동기화 관점에서 IMAP 서버에 "구독"됩니다.

이것이 올바른 경우 동기화는 효과적으로 배경 작업입니다. 내 접근 방식은 사용자별로 이벤트 모델을 사용하여 동기화하는 것입니다. 가능하면 사용자에 대한 활동 (신규/삭제 된 이메일)이있을 때 동기화 프로그램을 "알림"하십시오. 작업을 동기화하는 배경 프로세스에 동기화 "작업"을 추가하십시오. 알림 모델은 동기 프로그램이 동기화가 필요한 사용자에게만 작동하도록합니다.

소규모 신규/삭제 된 이메일 동기화 작업은 하나의 "프로세서"로 이동하고 Total Resynch 및 폴더 재구성과 같은 더 큰 작업이 다른 것으로 이동합니다. 전체 처리량을 높이려면 정말 큰 재 동기화 작업을 분할해야 할 수도 있습니다. "작은 작업"및 "큰 작업"프로세서는 성능 및 설계 고려 사항에 따라 두 개의 다른 서비스 또는 두 개의 다른 스레드 일 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top