2011-05-17 113 views
0

我做了一個webcrawler,每個線程不斷插入頁面和鏈接。我必須每個線程有一個數據庫連接或共享一個連接到他們?每個線程有一個數據庫連接?

+0

是的,根據您的要求,任一種都是可能的。 – 2011-05-17 18:29:51

+0

有人有一個關於連接池的好教程嗎?如果對於Java和PostgreSQL更好。對我來說這是一個新概念,我什麼也不知道。 – 2011-05-17 19:54:12

+0

大多數JDBC驅動程序都內置了池支持。如果您想自己控制它,則只需要一個額外的池。 – 2011-05-18 07:00:47

回答

4

您通常會使用某種數據庫連接池來處理這種情況,它可以爲您管理數據庫連接的生命週期。在Java中,Apache Commons DBCP庫經常用於此目的,但如果您使用的是其他框架,它們可能具有內置的功能。

+0

使用PostgreSQL的一些例子?數據庫對使用Apache Commons DBCP有影響嗎? – 2011-05-17 18:57:27

+0

您將使用Postgres JDBC驅動程序[1],並通過JDBC進行連接。 [1] http://jdbc.postgresql.org/download.html – jwismar 2011-05-17 19:23:20

+0

我創建連接並分發給線程? – 2011-05-17 19:44:35

0

也可以考慮在可行的情況下使用生產者消費者模式將爬網與數據庫I/O解耦。這將允許您稍後調整搜尋器線程(生產者)和數據庫連接 - I/O線程(消費者)的數量。您可以使用有界阻塞隊列將作業從抓取工具轉移/分發到作者。

+0

在自己的消費者線程中分離數據庫連接會帶來怎樣的性能提升。我假設你指的是類似於http://docs.oracle.com/javase/tutorial/essential/concurrency/guardmeth.html – JohnMerlino 2014-05-31 05:45:04

+0

從數據庫寫入中解耦爬行只是提供了調優機會。抓取工具的數量不一定==數據庫編寫者的數量。 – karmakaze 2014-06-19 03:45:53