Java模式类与数据库类似运算符将更有效

时间:2013-05-27 10:03:00

标签: java mysql

检索执行搜索操作的数据的最有效方法是什么。

以下是需求应用程序需要搜索已知变量(搜索关键字)的功能。

NB ::当前应用程序已经存储了存储在密钥中的搜索关键字,这些密钥以在应用程序级别维护的对象的形式存储在数据高速缓存中,并且用于执行搜索之外的其他目的。

现在有两种可用于启用搜索的功能 (1)与java.util.regex.Pattern执行一些模式匹配,然后从缓存中获取标识的结果行或 (2)请求数据库执行匹配并检索匹配的行?

需要知道哪个更有效。

对于类似操作执行的任何输入或模拟器上的数据都会受到赞赏吗?

2 个答案:

答案 0 :(得分:2)

选项1是首选,因为它不涉及网络I / O.

通过线路向数据库发送请求时,模式匹配和在本地缓存中查找很可能需要几纳秒或几毫秒,等待响应将需要几十(或几百)毫秒。数据库可能比您自己的代码更快地实现实际数据查找,这是无关紧要的。

答案 1 :(得分:1)

这太大了,无法发表评论:

简单回答您的问题:选项1最适合您描述的内容,例如本地缓存和可通过网络访问的数据库。

我想强调“本地”缓存。如果我们谈论分布式缓存会导致网络损失,那么答案就是“我们需要更多信息”。要考虑的因素是行的平均大小,网络延迟中值,读写概率,......回答这是一个真正的痛苦。

当我面临这样的决定时,我通常会通过以下步骤来决定使用什么。这里的主要指标是简单性,即我正在寻找可以保存我的时间的最简单的解决方案,同时还有响应式网站。

  1. 启动时,我尝试没有缓存。
  2. 如果这还不够,我还有一个应用服务器,我实现了一个本地缓存。
  3. 当我需要通过添加更多应用服务器(在负载均衡器后面)扩展时,我再次尝试没有缓存(依赖于数据库缓存)
  4. 只有达到性能限制时,我才会根据需要附加redis或memcache实例来实现分布式缓存系统(可能在各个应用服务器上保留一个小缓存)。