我的主要存储是MySQL,但我必须使用远程MSSQL Server,其中存储了书名和ID。我对该远程MSSQL Server具有只读访问权限。所有其他数据(书籍作者,年份,描述等)都存储在我的本地MySQL数据库中。我无法在我的本地MySQL中存储标题(这是协议条件)。我的PHP框架允许为这些书添加描述和许多其他数据 - 所有数据都存储在MySQL中。
总的来说,我可以开发这个框架,但我有一个弱点。在这种情况下,我需要有关如何组织搜索的专业建议。由于我使用2个不同的dbs,我不能使用简单的连接或者什么。当然,我可以进行两步搜索:1)获取标题,2)获取其他内容,然后在PHP中形成结果。但我担心它可能会很慢。有没有办法在MySQL的临时表中以某种方式从MSSQL中选择标题?或者我可能会错过这种数据库合作的一些好技术? 任何想法都非常感谢!
答案 0 :(得分:2)
MySQL对MSSQL一无所知,因此您无法加入两种不同类型的数据库服务器。但是,您的结构对于您所描述的内容来说并不是太糟糕。在我看来,你有三种可能的搜索方案1)仅搜索标题2)搜索标题和其他信息,3)仅搜索其他信息。问题出在案例2中,案例1和案例3都很容易。
我接近它的方式是一个两步的过程,正如你所提到的,有点像这样:
1)获取搜索查询
2)获取任何可能匹配的标题的MSSQL结果
3)a)将标题结果写入临时表或b)存储在内存结构中(取决于你用于搜索结果评分的内容 - 如果使用MySQL全文搜索,需要写入临时表)
4a)如果标题在临时表中,则对连接表执行搜索
4b)如果标题在内存中,则根据需要搜索其他书籍信息并将数据加入内存。
由于不在本地存储标题的限制,您将遇到一些性能问题,但最大限度地减少查询次数会有所帮助。
P.S。您的协议所说的完全是什么?你能把书名存放在记忆中吗?或者你总是要对远程服务器执行查询?如果你可以将它们存储在内存中,也许你可以查询MSSQL数据库并将标题放在MySQL内存表(http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html)中,当服务器关闭时它会从内存中消失。 / p>