指南针在高度并发的环境中

时间:2011-09-27 08:22:11

标签: java architecture compass-lucene

在我们的系统中,我们将联系人数据库存储在PostgreSQL中。我们存储了很多关于每个联系人的信息,这些信息存储在许多表中。

我们的用户希望拥有非常灵活的搜索选项。由于加入所有必需的搜索表需要花费大量时间,因此我们决定使用Compass(大约一年前)在保存/更新期间为每个联系人编制索引,然后在Compass中进行搜索。

现在的问题是,当我们有很多用户同时操作联系人(更新,导入联系人,添加到群组等等)时,最终用户的每次保存/更新都会锁定指南针索引和其他用户必须等到它被释放。即使超时设置为2分钟,我们也常常会遇到锁定超时异常。总体而言,我们的性能非常差 - 在峰值中保存一个触点可能需要50秒。

显然索引是写操作的瓶颈。我们可以异步进行索引,但是我担心在高峰时运行报告可能会因为索引的联系长队列而产生不一致的报告。

您对如何更改架构或如何解决此问题有任何建议吗?

0 个答案:

没有答案