当前位置: 首页 > 面试题库 >

如何在大型数据库中使用typeahead.js

姚星宇
2023-03-14
问题内容

我有10,000个地址和5,000人的大型数据库。

我想让用户在数据库中搜索地址或用户。在输入文本时,我想使用Twitter的提前提示功能来建议结果。

在此处查看NBA示例:http :
//twitter.github.io/typeahead.js/examples。

我了解从速度和负载的角度来看,预取15,000个项目并不是最佳选择。尝试实现此目标的更好方法是什么?


问题答案:

由于没有人回答,因此我将继续我的建议。

我觉得你的大数据库最适合使用remotetypeahead.js。快速示例:

$('#user-search').typeahead({
    name: 'user-search',
    remote: '/search.php?query=%QUERY' // you can change anything but %QUERY
});

它的作用是当您在中键入字符时,input#user-search它将向页面发送AJAX请求,并将search.php查询作为输入内容。

在上,search.php您可以捕获此查询并在您的数据库中查找它:

$query = $_GET['query'].'%'; // add % for LIKE query later

// do query
$stmt = $dbh->prepare('SELECT username FROM users WHERE username LIKE = :query');
$stmt->bindParam(':query', $query, PDO::PARAM_STR);
$stmt->execute();

// populate results
$results = array();
foreach ($stmt->fetchAll(PDO::FETCH_COLUMN) as $row) {
    $results[] = $row;
}

// and return to typeahead
return json_encode($results);

当然,由于您的数据库很大,因此您应该优化SQL查询以加快查询速度,也许可以缓存结果,等等。

在预输入方面,要减少查询数据库的负载,可以指定minLengthlimit

$('#user-search').typeahead({
    name: 'user-search',
    remote: '/search.php?query=%QUERY',
    minLength: 3, // send AJAX request only after user type in at least 3 characters
    limit: 10 // limit to show only 10 results
});

因此,数据库的大小实际上并不重要,这种方法应该可以很好地工作。

这是PHP中的一个示例,但是对于任何后端,当然都应该相同。希望你得到基本的想法。



 类似资料:
  • 我有这个密码 E/AndroidRuntime:致命异常:AsyncTask#1进程:com.arnaway.metromap,pid:9493 java.lang.RuntimeException:在Android.os.AsyncTask$3执行doInBackground()时出错。done(AsyncTask.java:353)在java.util.concurrent.FutureTas

  • 问题内容: 我正在进行的一个项目在不久的将来可能会跨越几百万行,所以我正在研究我使用的数据库,因为这肯定会证明是一个问题。据我所读,一旦涉及到表的2,000,000行问题,SQL的所有形式都会出现问题。对于这些大型项目,有没有推荐好的数据库? 我正在谈论的是一个网站,归档旧条目并不理想,但是如果证明这是我无法克服的问题,则可以这样做。 谢谢。 问题答案: 我已经在MS SQL Server中使用了

  • 问题内容: 我想将最大大小为10MB的大文件上传到我的MySQL数据库。使用我将PHP自己的文件上传限制更改为“ 10485760” = 10MB。我最多可以上传10MB的文件。 但是,如果文件大小超过1 MB,则无法将其插入数据库中。 我正在读取所有文件数据,并将其作为要插入LONGBLOB字段中的字符串传递给insert查询。 但是,大于1 MB的文件不会添加到数据库中,尽管我可以用来确保文件

  • 现在;我得到以下错误: 我以为这是因为我没有在会话中使用那个数据库;所以我去处理使用session.execute并使用sql语句use来使用数据库,但它给我带来了语法错误 check_if_exists=session.query(latest_movies_scraper).filter_by(name=dictionary['title']).first()

  • 问题内容: 如何在MAMP上导出/导入大型数据库?使用PHPMyAdmin无法正常工作。 问题答案: 应该通过如下所示的终端来完成。 在终端中,使用以下命令导航到MAMP的文件夹 使用此命令导出文件。EG将是 行应该出现在说。在这里输入MySQL密码。请记住,这些字母不会出现,但是它们在那里。 如果需要导入,请使用BigDump,这是一个MySQL Dump Importer。

  • 我正在Quarkus中实现一个方法,它应该向客户端发送大量数据。使用JPA/Hibernate从数据库中读取数据,序列化为JSON,然后发送到客户端。如果没有整个数据在内存中,如何有效地完成此操作?我尝试了以下三种可能性,但都没有成功: 使用JPA中的getResultList,返回一个以列表为主体的响应。MessageBodyWriter将负责将列表序列化为JSON。然而,这会将所有数据拉入内存