2012-02-10 2 views
0

다음과 같은 문제가 있습니다. Java 응용 프로그램을 사용하면 1 초마다 외부 XML 파일의 데이터를 데이터베이스 테이블에 삽입해야합니다.PostgreSQL 데이터베이스에 데이터 삽입 및 확인

또한 동일한 테이블에서 선택/업데이트 쿼리를 수행해야합니다.

테이블을 며칠 간격으로 청소합니다. 내 질문은 : 어떻게 최적으로 해결할 수 있습니까? 모든 것은 작동해야합니다 live. 우리는 시간 이동이있는 상황을 허용 할 수 없습니다 (기록은 1 초마다 점검되지 않습니다).

아이디어가 있으십니까?

+0

을, (,의 모든 초 가정 해 봅시다)이 데이터를 즉시 PostgreSQL db에 삽입하려고합니다. 이렇게하면 다음과 같습니다. 초 단위로 레코드 배치를 삽입해야합니다. 일괄 처리에서 데이터의 양을 아는 것이 중요합니다. 일괄 처리에 몇 개의 레코드를 삽입해야합니까? 데이터를 수신하는 채널을 아는 것도 좋을 것입니다. – bpgergo

+0

약 10-20 개의 레코드. 파일은 외부 서버를 통해 생성됩니다. URL로 데이터를받습니다. 'http://example.com/get_xml.php?param=2 – Astaz3l

답변

1

응용 프로그램을 계획하는 정도에 따라 JPA/Hibernate가 데이터베이스에 액세스 할 수 있다고 생각할 수 있습니다. DB에 액세스하는 것이 훨씬 간단하지만 POJO에서 데이터에 액세스하기 때문에 POJO가 성능에 최적화되지 않는다는 단점이 있습니다 (원시 SQL 및 원시 데이터 조작은 항상 객체 조작보다 빠름).

작업 확인을 위해 quartz를 설정하여 주기적으로 작업을 예약 할 수 있습니다.

귀하의 질문은 다소 힌트를 제공하기 다소 모호합니다. 웹 응용 프로그램입니까? Java EE 하나? 무거운 클라이언트? 고성능이 얼마나 필요합니까? 미래에 피자 냅킨에 쓰지 않는 소규모 응용 프로그램을 만들고 싶습니까? 아니면 앞으로 확장 될 응용 프로그램을 계획 중입니까?

+0

애플리케이션이 조용합니다. XML (초당 10 개의 새 레코드)에서 데이터를 가져오고 있습니다. 이 파일의 데이터는 1 초마다 데이터베이스의 테이블에 삽입됩니다. 이미 완료되었습니다. 큰 문제는이 데이터를 실시간으로 확인하는 것입니다. 우리는 사용자가 다른 테이블에 데이터를 삽입하는 PHP 애플리케이션을 가지고있다. (예를 들어,'userdata' ='1234') userdata가 테이블에 존재 하는지를 1 초마다 확인하는 백그라운드에서 애플리케이션 (JAVA)을 실행해야한다. 가장 중요한 부분은 확인하는 동안 데이터를 건너 뛸 수 없습니다. 성과는 중요합니다. 앞으로 확장이 필요할 것입니다. – Astaz3l

+0

그런 다음 원시 SQL (PreparedStatement 등 ...)을 사용하여 데이터에 액세스합니다. Quartz 설정은 작업 스케줄링을 수행 할 수있는 편리한 기능을 제공하므로 좋은 옵션처럼 보인다. 데이터 건너 뛰기는 무엇을 의미합니까? –

+0

내 말은, 두 번째 기록을 추가하고, 다음 기록은 늦게 체크해야한다는 뜻입니다. 나중에 데이터를 확인할 상황을 허용 할 수 없습니다 (예 : 데이터베이스에 추가 된 후 3 초 후). – Astaz3l

0

초당 10-20 개의 레코드가 많지 않습니다. 당신이 어떤 성능 문제가 어쨌든, 당신은 JDBC batch inserts 사용하십시오 : 나는 정기적으로, 당신은 당신이 특정 채널을 통해 수신 데이터의 일정 금액을 파악

PreparedStatement stmt = con.prepareStatement(
    "INSERT INTO table_name (field_name1, field_name2) VALUES (?, ?)"); 

stmt.setInt(1, 2000); 
stmt.setString(2, "String value"); 
stmt.addBatch(); 

stmt.setInt(1, 3000); 
stmt.setString(2, "Other String"); 
stmt.addBatch(); 

// submit the batch for execution 
int[] insertCounts = stmt.executeBatch(); 
+0

데이터를 추가해도 문제가되지 않습니다. 더 큰 문제는 삽입 후 데이터를 확인하는 것입니다. 레코드가 테이블에 있는지 확인하기 위해 삽입 후 1 초 밖에 없습니다. 데이터를 확인할 때 문제가 있을지 모르겠습니다.어느 날베이스에서 약 2 백만 레코드가 될 것입니다. 나는 또한 질문을 몇 번 선택하고해야 할 일초 만 가져야한다. – Astaz3l

관련 문제