2012-02-10 83 views
0

我有以下问题。使用Java应用程序,我需要每1秒将外部XML文件的数据插入到数据库表中。在PostgreSql数据库中插入并检查数据

另外,我必须在同一个表上执行选择/更新查询。

表格每隔几天清洗一次。我的问题是:如何最优解决它?一切都必须工作live。我们不能允许存在时间偏移的情况(记录不是每1秒检查一次)。

任何想法?

+0

我想你有你通过一定的渠道获得了一定量的数据,定期,(让我们在每一秒说, ),你想立即将这些数据插入到PostgreSQL数据库中。所以让我们这样说吧:你必须在第二秒插入一批记录。了解批次中的数据量很重要。您需要在批次中插入多少条记录?了解通过其接收数据的渠道也是一件好事。 – bpgergo 2012-02-10 08:41:23

+0

约10-20条记录。文件通过外部服务器生成。我通过URL接收数据:http://example.com/get_xml.php?param=2 – Astaz3l 2012-02-10 08:52:03

回答

1

根据您计划应用程序的复杂程度,您可以考虑使用JPA/Hibernate来访问数据库。访问数据库变得更加简单(因为你操纵POJO来访问你的数据),但缺点是它在性能方面不是最优的(操纵原始的sql和原始数据总是比操作对象更快)。

为了您的工作检查,我会设置石英,这将为您提供定期安排工作的可能性。

你的问题有点含糊不清,以提供更多的提示。它是一个Web应用程序吗?一个Java EE吗?一个沉重的客户?你需要多高的性能?你想创建一个没有将来写在比萨餐巾上的小应用程序吗?或者你打算有一个将来会扩展的应用程序。

+0

该应用程序安静复杂。我从XML获取数据(每秒10条新记录) 此文件的数据每隔1秒插入数据库的表中。这已经完成了。 更大的问题是现场检查这些数据。我们有一个PHP应用程序,其中用户向另一个表中插入数据(例如'userdata' ='1234') 我需要在后台运行应用程序(JAVA),它会检查表1中是否存在用户数据。 最重要的部分是在检查时不跳过任何数据。性能很重要。未来可能需要扩张。 – Astaz3l 2012-02-10 08:19:22

+0

然后我会使用原始SQL(PreparedStatement等)来访问您的数据。设置Quartz看起来也是一个不错的选择,因为它会为您提供一整套方便的功能来执行作业调度。跳过数据是什么意思? – 2012-02-10 08:43:54

+0

我的意思是,在第二个添加记录,下一个必须在最晚检查。我们不能允许稍后检查数据的情况(例如,将数据添加到数据库后3秒) – Astaz3l 2012-02-10 08:55:41

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

添加数据不是问题。插入后更大的问题是检查数据。插入后我只有一秒钟检查表中是否存在记录。我不知道在检查数据时是否会有问题。在基地有一天之后会有大约200万条记录。我还需要进行几次询问,只有一秒钟就可以做到 – Astaz3l 2012-02-10 09:24:40

相关问题