我有一个包含10000个地址和5000人的大型数据库.

我想让用户在数据库中搜索地址或用户.我想在他们输入文本时使用Twitter的TypeAhead来建议结果.

请看这里的NBA例子:http://twitter.github.io/typeahead.js/examples个.

我知道从速度和负载的Angular 来看,预取15,000个项目并不是最优的.try 实现这一目标的更好方式是什么?

推荐答案

既然没有人回答,那我就提出我的建议.

我认为最适合您的大型数据库是使用remotetypeahead.js.快速示例:

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

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

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查询以更快地查询,也许可以缓存结果,等等.

在typeahead端,为了减少查询数据库的负载,可以指定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编写的示例,当然,对于任何后端,它都应该是相同的.希望你能掌握基本的概念.

Database相关问答推荐

如何从大型Oracle数据库中删除列?

将数据拆分为月份(以Postgres为单位

SearchView 在 Android Studio 中显示 Data.entity.Cantact.@85c7ce6

存储具有公共链接但 ID 很长的用户文件是否安全?

函数到关系映射比对象到关系更容易吗?

什么是hibernate annotated类中使用的 catalog?

su postgres:Sorry?

如何在 Play 2.0 中 for each 环境设置不同的数据库?

为什么数据库索引使用平衡树,而不是哈希表?

我需要在这个 Django 模型中添加一个 db_index 吗?

PHP + SQL Server - 如何设置连接字符集?

Windows 环境下无法识别 postgres 'psql' 命令

来自外部源的 Django 用户和身份验证

日期范围重叠判断约束

存储信用卡号 - PCI?

关系未更新的 NSFetchedResultsController

使用带有联合和 CLOB 字段的 Select 时出现错误 ORA-00932

为什么 DBMS 不支持 ASSERTION

sqlite 时间戳格式化

Chrome 将其 SQLite 数据库保存到哪里?