2012-02-23 6 views
0

하나의 열에 Y/N 플래그가있는 데이터베이스 테이블이 있습니다. 나는 플래그가 'N'인 모든 레코드를 읽고 레코드를 처리 한 후 해당 레코드에서 플래그를 'Y'로 설정하려고합니다. 두 개의 개별 연결을 사용하여 동시에이 작업을 수행하는 것이 맞고 합리적인가요? 또는 전체 표를 먼저 읽고 독서를 마친 후에 업데이트해야합니까? 이것에 대한 올바른 접근 방법은 무엇입니까?읽을 때 테이블을 업데이트하십시오.

관련 데이터베이스는 중요한 경우 Netezza입니다.

+0

항상 중요합니다. 나는 넷 에츠자를 몰라서 대답 할 수 없다. 그러나 SQLite와 WAL 모드가 꺼져 있었다면, 응답은 없었습니다 : 동시 읽기 및 쓰기 없음. – Benoit

+0

감사합니다. 확실히 읽기와 쓰기를 구분하는 것이 더 깨끗해 보입니다. 나는 트랜잭션 격리가 여기에 도움이되는지, 그런 종류의 일을하는 표준 패턴이 있는지 궁금해했다. – drmirror

+2

[읽었습니까] (http://www.dsxchange.com/viewtopic.php?t=125306&view=previous)? – Benoit

답변

1

먼저 읽은 다음 업데이트해야합니다. 비동기가 아닙니다. "선택"부분에 오랜 시간이 걸리면 일괄 작업을 고려해야합니다. 별도의 연결을 사용할 수 있지만 읽기를 완료했음을 확신해야합니다.

+0

고마워, 그건 분명히주의의 길 같아. 나는 트랜잭션 격리와 데이터베이스가 그런 종류의 일에 사용할 수있는 다른 도구에 대해 좀 더 배우기를 바랬다. 그러나 모든 것을 먼저 읽은 다음 업데이트하는 것이 가장 깨끗한 방법이라는 데 동의합니다. – drmirror

1

주로 디자인과 필요에 따라 다릅니다.

플래그는 얼마나 중요합니까? 플래그를 처리하기 전에 모든 플래그를 설정하면 문제가 발생합니다 ... 등등.

두 개의 연결이 필요한 이유는 무엇인지 이해하지 못했기 때문에 대개 열려있는 연결이 하나 있습니다. Netezza 블록을 모르지만 일부 시스템은 선택 및 업데이트를 동시에 수행 할 수 있습니다. 공정,

  1. 로드 무리를 한 후 모든 플래그를 업데이트

    당신은 할 수 있습니다. (가장 빠른, 하나의 실패 = 모두 실패)

  2. 한 묶음로드, 하나의 플래그 업데이트, 다음 프로세스 ... (매우 빠르며 하나의 실패가 모두 충돌하지 않음)
  3. 하나씩 가져 와서 업데이트하십시오 . (가장 느리지 만 가장 안전합니다)
관련 문제