문제

MSSQL 2005에는 ~ 15k 행이 있는데, 한 행은 하나의 행이 문서입니다. 글을 쓰는 CLR-UDF가 있습니다 N 스키마 결합 XML 파일에 행 스키마 결합 XML을 JSON으로 변환하는 XSL 변환이 있습니다.

이 기존 도구를 사용하면 MSSQL로 XML로 JSON으로 이동할 수 있다고 생각합니다. 내가 배치한다면 N JSON 파일 당 행, 파일을 통해 루프로 컬을 스크립트하고 벌크 API를 사용하여 CouchDB에 게시 할 수 있습니다. _bulk_docs.

이것이 효과가 있습니까? 아무도 전에 이와 같은 마이그레이션을 한 적이 있습니까? 더 나은 방법을 추천 할 수 있습니까?

도움이 되었습니까?

해결책

지금까지 레거시 SQL 데이터베이스에서 CouchDB로 전환했습니다. 나는 항상 다소 다른 접근법을 가지고있었습니다.

  1. SQL-DB의 기본 키를 Document-ID로 사용했습니다. 이를 통해 중복 서류에 대한 두려움없이 계속해서 수입 할 수있었습니다.
  2. 벌크 가져 오기 대신 행으로 가져 왔습니다. 디버깅이 더 쉬워집니다. 인터넷 연결에서 초당 5-10 개의 인서트 사이를 보았습니다. 이것은 번개가 빠르지 않지만 그것은 나에게 충분히 빠릅니다. 내 가장 큰 데이터베이스는 총 20GB의 600.000 문서입니다. 가져 오기 동안 데이터베이스를 부풀어 오르므로 때때로 압축을 실행하십시오. 그런 다음 행이 거대한 15.000 행이 크지 않으면 다시는 소리가 크지 않습니다.

내 가져 오기 코드는 일반적으로 다음과 같습니다.

def main():
 options = parse_commandline()
 server = couchdb.client.Server(options.couch) 
 db = server[options.db] 
 for kdnnr in get_kundennumemrs():
    data = vars(get_kunde(kdnnr)) 
    doc = {'name1': data.get('name1', ''),
           'strasse': data.get('strasse', ''),
           'plz': data.get('plz', ''), 'ort': data.get('ort', ''),
           'tel': data.get('tel', ''), 'kundennr': data.get('kundennr', '')}

    # update existing doc or insert a new one
    newdoc = db.get(kdnnr, {})
    newdoc.update(doc)
    if newdoc != db.get(kdnnr, {}):
        db[kdnnr] = newdoc 
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top