我正在使用PHP Yii进行应用程序的体系结构设计,该应用程序具有大量记录(将来大约有一百万个)。 DB结构如下:
要求:
方法1:
缺点:
表现不佳
Aprroach 2:
缺点:
在每次更新时创建/更新关键字和映射。
方法3:
问题:
方法4:
将MongoDB / Solr / Lucene等NoSQL DB与RelationalDB.Use noSQL结合使用,以查找articleId,ProfileId,ForumId等。用于显示结果的关系数据库。
缺点:
还有其他方法吗?哪种方法具有可扩展性并能提供良好的性能?
答案 0 :(得分:1)
如果你这样说,方法4是最具扩展性的,并且具有最佳性能。
但是,由于不清楚内容实际是什么以及数据集的大小 - 大约一百万行'几乎不是一个迹象,因为它没有说明行包含什么,如果这些行是否在一个表中 - 它实际上不可能给出准确的建议。无论如何,方法4可能是最快的,但它是最有效的吗?一个表中有一百万行,大约有4列,每行包含大约250个字节的数据(这里只是一个猜测,你的里程可能会有所不同),实际上并不是那么多。很好地选择索引并优化查询,您可能只需要RDBMS。
我的建议是:建立一个数据集来测试并尝试各种方法。
答案 1 :(得分:1)
如果要快速搜索SQL数据库中多个表中的多个列,则需要在几乎所有内容上放置索引。这是将关系数据库的写入性能提升到记录低点的好方法。
出于这个原因,我建议你使用一个独立的系统进行搜索。从你提到的技术我宁愿推荐专用搜索服务器Apache Solr(它是Lucene项目的一部分,而不是一个单独的技术),因为MongoDB是一个有趣的数据库技术,有很多很棒的功能,但它的文本搜索是不是核心功能,而是标记为。
但技术选择总是主观的,因此评估所有选项,看看它们如何与您的特定要求对齐并做出自己的决定。