0

我必须对大约 160K 条记录进行查找,其中数据的形式是 id,我们需要获取给定值在 range1 和 range2 范围内的行,到目前为止,它是我们使用的一个 between 查询.

我昨天开始使用 memcache,它会找出针对给定值的特定行是否在 memcache 中,如果不是,则通过从数据库中获取它来将其放入 memcache 中。

我不确定 memcache 本身的查找顺序是 o(1) 还是 o(n),我知道 dbsearch 最多可以让我 o(log n) ,我正在考虑在中间保留另一层其他一些内存对象的[我现在想不出来,但我当然不想使用会话将表保留在内存中],而是从这个内存对象中获取数据,并且如果在其中找不到,则转到数据库。

PS - 我的数据库表几乎没有经过任何更改。

所以我想的顺序是如果找不到则在内存缓存中查找(在内存中查找 - 对数组进行二进制搜索),如果在数据库中找不到查找,则添加到内存缓存,添加到内存并添加到内存缓存.

我在想正确的方向吗

4

1 回答 1

0

Memcached 非常快,查找时间是 o(1),而不是 o(n),所以最好只使用 memcached 和一些后端数据库。考虑您在上面提出的方案。在中间使用比 memcached 慢的二级缓存只会增加请求的延迟,因为您现在可能需要向 3 个位置询问某些数据,而不仅仅是两个。此外,由于 memcached 将比内存数据库解决方案更快,因此最好将所有额外内存提供给 memcached。还要考虑的另一件事是为您的应用程序添加额外层的管理开销。

于 2013-02-21T19:19:01.337 回答