Php 最好的设计方法是什么?更快的搜索?
我正在使用PHPYII进行一个应用程序的架构设计,它有大量的记录(未来大约有一百万条记录)。 数据库结构如下所示: 要求:Php 最好的设计方法是什么?更快的搜索?,php,mongodb,yii,solr,nosql,Php,Mongodb,Yii,Solr,Nosql,我正在使用PHPYII进行一个应用程序的架构设计,它有大量的记录(未来大约有一百万条记录)。 数据库结构如下所示: 要求: 快速关键字搜索个人资料,文章,论坛。关键字可以是列的组合,例如BizName+城市、城市+专业、ServiceName+城市、文章标题等 用户关键字建议 在选项卡中显示搜索结果。例如:简介、文章、论坛等 方法1: 拥有关系数据库。使用OR和模式匹配在多个列上编写SQL 缺点: 表现不佳 第2条: 创建关键字表。创建可搜索的列的组合,并将它们保存在KeywrodTab中 创
还有别的办法吗?哪种方法是可扩展的,并且可以提供良好的性能?如果您这样说,那么方法4是最可扩展的,并且具有最好的性能 然而,由于不清楚实际内容是什么以及数据集有多大——“大约一百万行”很难表示,因为它没有说明行包含什么以及这些行是否在一个表中——实际上不可能给出准确的建议。方法4可能是最快的,但它是最有效的吗?在一个表中,有大约4列的一百万行,每个列包含大约250字节的数据(这里只是猜测,您的里程可能有所不同),实际上并没有那么多。选择好索引并优化查询,RDBMS可能就是您所需要的全部
我的建议是:建立一个数据集进行测试,并尝试各种方法。当您想在SQL数据库中通过多个表中的多个列快速搜索时,您几乎需要在所有内容上放置索引。这是将关系数据库的写入性能降至记录低点的好方法 因此,我建议您使用独立的系统进行搜索。从您提到的技术来看,我更愿意推荐专用搜索服务器ApacheSolr(它是Lucene项目的一部分,不是一种单独的技术)而不是MongoDB,因为MongoDB是一种有趣的数据库技术,有很多很好的功能,但它的文本搜索不是一个核心功能,而是一种附加功能
但是技术选择总是主观的,所以请评估所有选项,看看它们如何符合您的具体要求,然后做出您自己的决定。我会选择方法4,然后制作一个智能脚本来增量更新您的索引,每两天完全引用它们一次(就像谷歌使用其机器人所做的那样)方法4。Solr可以进行增量更新,您可以让复制服务器在一台服务器上进行写入/更新,在其他服务器上进行读取,并持续运行复制。嗨,Plenka,我还想从托管角度了解安装Solr的可行性。我们将有一个PHP托管环境。我相信,对于ApacheSolr,我们也需要J2EE环境,它将是从PHP到J2EE服务器的n/w调用。您可以将它们安装在与PHP托管环境相同的服务器上,但建议使用单独的服务器。默认情况下,通过HTTP在80以外的另一个端口(Tomcat上的默认端口是8080)上查询Solr。如果您使用Linux发行版作为服务器操作系统,那么这些应用程序很可能在存储库中随时可用,使安装变得轻而易举。感谢您的回复。对不起,我还有一个问题。我可以在搜索框中使用Solr的自动建议功能吗?