高效的服务器端自动完成

2023-12-22

首先我所知道的:

过早的优化是万恶之源

但我认为错误的自动完成功能真的会毁掉你的网站。

我想知道是否有任何库可以有效地进行自动完成(服务器端),最好可以放入 RAM(以获得最佳性能)。所以没有浏览器端 javascript 自动完成(yui/jquery/dojo)。我认为 stackoverflow 上有足够多的主题。但我在 stackoverflow 上找不到关于此的好帖子(也许看起来不够好)。

例如自动完成名称:

names:[alfred, miathe, .., ..]

我能想到的:

  • simple SQL like for example: SELECT name FROM users WHERE name LIKE al%.
    • 我认为这个实现会因大量同时用户或大型数据集而崩溃,但也许我错了,所以数字(可以处理)会很酷。
  • Using something like solr terms like for example: http://localhost:8983/solr/terms?terms.fl=name&terms.sort=index&terms.prefix=al&wt=json&omitHeader=true.
    • 我不知道这个的性能,所以有大网站的用户请告诉我。
  • 也许像在内存redis trie https://stackoverflow.com/questions/1958005/redis-autocomplete/我还没有测试过性能。
  • 我还在这篇文章中读到了如何在java https://stackoverflow.com/questions/971052/autocomplete-server-side-implementation(lucene和shilad创建的一些库)

我想听到的是站点使用的实现以及它可以如何更好地处理负载的数字:

  • 链接到实现或代码。
  • 您知道它可以缩放到的数字。
  • 如果能通过http或者socket访问就太好了。

非常感谢,
Alfred


优化自动完成

不幸的是,这个问题的解决很大程度上取决于您希望查询的数据。

只要您花时间使用“EXPLAIN”或探查器来向您展示查询优化器计划如何执行查询,LIKE 查询就不会给您的数据库带来太大压力。

要记住的一些基本知识:

  • 索引:确保您已设置索引。 (是的,在很多情况下 LIKE 确实使用索引。myitforum 上有一篇关于该主题的优秀文章。SQL 性能 - 索引和 LIKE 子句 http://myitforum.com/cs2/blogs/jnelson/archive/2007/11/16/108354.aspx ).

  • 连接:确保您的连接已就位并由查询规划器进行优化。 SQL Server Profiler 可以帮助解决这个问题。留意全索引或全表扫描

自动完成子集

自动完成查询是一种特殊情况,因为它们通常作为不断递减的子集工作。

  • 'name' LIKE 'a%'(可能返回10000条记录)
  • 'name' LIKE 'al%'(可能返回 500 条记录)
  • 'name' LIKE 'ala%'(可能返回75条记录)
  • 'name' LIKE 'alan%'(可能返回20条记录)

如果您返回查询 1 的整个结果集,则无需再次访问数据库来获取以下结果集,因为它们是原始查询的子集。

根据您的数据,这可能会带来进一步的优化机会。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

高效的服务器端自动完成 的相关文章

  • 为什么这个函数在额外读取内存时运行速度如此之快?

    我目前正在尝试了解 x86 64 上某些循环的性能属性 特别是我的 Intel R Core TM i3 8145U CPU 2 10GHz 处理器 具体来说 在循环体内添加一条额外的指令来读取内存几乎可以使性能提高一倍 而细节并不是特别重
  • 当内存排序放宽时,C++ 延迟会增加

    我在 Windows 7 64 位 VS2013 x64 发行版 上尝试内存排序 我想使用最快的同步来共享对容器的访问 我选择了原子比较和交换 我的程序产生两个线程 写入器推送到向量 读取器检测到这一点 最初我没有指定任何内存顺序 所以我假
  • “ab”或“httperf”哪个更适合检查网站的性能?

    到目前为止我知道 ab 和 httperf 两者都可以检查网站的性能 这个比那个好吗 嗯 这确实有点取决于您想要检查的内容 但我自己总是使用 httperf 关键区别在于 httperf 尝试以给定速度发送连续的请求流 无论请求是否得到答复
  • C# 编译器不会优化不必要的强制转换

    前几天 在写答案的时候这个问题 https stackoverflow com questions 2208315 why is any slower than contains在这里 关于溢出 我对 C 编译器感到有点惊讶 它没有按照我的
  • 更快地评估从右到左的矩阵乘法

    我注意到以二次形式评估矩阵运算右到左明显快于左到右在 R 中 取决于括号的放置方式 显然它们都执行相同的计算量 我想知道为什么会这样 这与内存分配有什么关系吗 A 5000 5000 B 5000 2 A matrix runif 5000
  • 从 dask 数据框中的日期时间序列获取年份和星期?

    如果我有一个 Pandas 数据框和一个日期时间类型的列 我可以按如下方式获取年份 df year df date dt year 对于 dask 数据框 这是行不通的 如果我先计算 像这样 df year df date compute
  • 优化算术编码器

    我正在优化名为的 C 库的编码步骤PackJPG http www elektronik htw aalen de packjpg 我使用 Intel VTune 对代码进行了分析 发现当前的瓶颈是 PackJPG 使用的算术编码器中的以下
  • 清除通过在 IPython 中绘图分配的内存

    我正在 IPython QtConsole 和 Notebook 中绘制一些大图 这些占用了大量的内存 但是一旦它们被绘制出来 我就不再需要它们了 它们就可以走了 我怎样才能释放内存 None以下作品 close clf cla reset
  • 抛出错误的分配

    我在尝试使用升压托管共享内存时收到 bad alloc 我从他们的快速指南中复制了升压示例 以供不耐烦的人使用 并结合了我自己的更改 我的代码如下 我注释掉了示例内容并在下面编写了自己的代码 我还进行了一些调试和测试 有人有什么想法吗 任何
  • 实验室数据与 Google Page Insight 的起源摘要之间的混淆

    任何知道 Core web Vitals 详细信息的人请帮我解决一些问题 How 起源总结与实验室数据不同吗 Speed Insight 如何获取起源摘要 这是同一页面或相似页面最近 28 天的总评分吗 我检查了具有相同内容的网站类别页面L
  • 为什么我的 CAOpenGLLayer 更新速度比之前的 NSOpenGLView 慢?

    我有一个在 Mac OS X 上渲染 OpenGL 内容的应用程序 最初它渲染到 NSOpenGLView 然后我将其更改为渲染到 CAOpenGLLayer 子类 当我这样做时 我看到了巨大的性能损失 帧速率减半 鼠标响应能力降低 卡顿
  • 为什么 istream/ostream 慢

    于 50 40http channel9 msdn com Events GoingNative 2013 Writing Quick Code in Cpp Quickly http channel9 msdn com Events Go
  • 需要多少个线程才能使它们成为错误的选择?

    我必须使用 boost thread 用 C 编写一个不太大的程序 当前的问题是处理大量 可能是数千或数万 数百和数百万也是可能的 数量 可能 的大文件 每个文件彼此独立 并且它们都驻留在同一目录中 我正在考虑使用多线程方法 但问题是 我应
  • 如何分析堆转储

    我成功地生成了我的应用程序机器的堆转储 但我不知道如何分析它 有人可以告诉我怎么做吗 在 Sun Solaris 上使用适用于 Java 的 jhat 实用程序 一个很好的例子在这里https blogs oracle com alanb
  • C# 代码在 IIS 上运行速度快,但在 Mono 上运行速度慢 - 如何改进?

    我有一个 ASP NET 应用程序 它在我的 Windows 开发计算机上运行良好 不过 服务器是运行 Mono 的 Linux 一旦上传 相同的代码在 Windows 上的运行速度会比在 Windows 机器上慢 4 到 5 倍 例如 一
  • 为什么删除 else 会减慢我的代码速度?

    考虑以下函数 def fact1 n if n lt 2 return 1 else return n fact1 n 1 def fact2 n if n lt 2 return 1 return n fact2 n 1 它们应该是等价的
  • 编译器特定的内存初始化

    有没有办法保证整个程序中某些对象的静态对象初始化顺序 我有内存分配器 我希望将其作为程序中的第一件事进行分配 因为它们将在整个程序的其他地方使用 并且我想使用这些分配器来分配所有后续内存 我知道这可能是特定于编译器的 因为我不相信 C 标准
  • 提高光线追踪命中功能的性能

    我有一个简单的 python 光线追踪器 渲染 200x200 的图像需要 4 分钟 这对于我的口味来说绝对是太多了 我想改善这种情况 几点 我为每个像素发射多条光线 以提供抗锯齿功能 每个像素总共发射 16 条光线 200x200x16
  • 如何以最佳方式计算 python 列表中的元素数量

    这几乎是同一个问题here https stackoverflow com questions 3710976 counting unique elements in a list 除了我要询问排序结果的最有效解决方案 我有一个列表 大约
  • dns-prefetch + 预连接与浏览器缓存

    为了提高页面加载时间 我想使用dns prefetch and preconnect对于外部 JavaScript 如果资源 在我的例子中是外部 javascript 已经在浏览器缓存中会发生什么 做dns prefetch and pre

随机推荐