0

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

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

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

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

需要知道哪个更有效。

对它的任何输入或为类似操作执行的模拟器上的数据将不胜感激?

4

2 回答 2

2

选项 1 更可取,因为它不涉及网络 I/O。

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

于 2013-05-27T11:41:07.283 回答
1

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

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

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

当我面临这样的决定时,我通常会通过以下步骤来决定使用什么。这里的主要指标是简单性,即我正在寻找最简单的解决方案,以节省我的时间,同时仍然拥有一个响应式站点。

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