我有一个包含10,000个地址和5,000个人的大型数据库。
我想让用户搜索数据库,可以搜索地址或用户。我想使用Twitter的typeahead在用户输入文本时建议结果。
在这里查看NBA示例:http://twitter.github.io/typeahead.js/examples。
我理解预取15,000个项在速度和负载方面都不是最优的。有什么更好的方法来尝试实现这一点呢?
我有一个包含10,000个地址和5,000个人的大型数据库。
我想让用户搜索数据库,可以搜索地址或用户。我想使用Twitter的typeahead在用户输入文本时建议结果。
在这里查看NBA示例:http://twitter.github.io/typeahead.js/examples。
我理解预取15,000个项在速度和负载方面都不是最优的。有什么更好的方法来尝试实现这一点呢?
既然没有人回答,那我就直接执行我的建议。
我认为适合你的大型数据库的最佳选择是使用typeahead.js
中的remote
。快速示例:
$('#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查询以获得更快的查询速度,可能需要缓存结果等。minLength
或limit
。$('#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的一个示例,但当然对于您拥有的任何后端都应该是相同的。希望您能理解基本的想法。