3

我用 php 和 MySQL 编写了一个基本的 Web 应用程序,它使用查询字符串来查找各种信息。例如:xxxxxxx.com/?profile=1245

非常基本的,第一次开发者类型的网络应用程序。

我想创建不同的帐户,每个帐户都有自己的数据集。我想通过使用子域来区分这些帐户。例如:username.xxxxxxxx.com?profile=4527

我在我的 Apache 配置中设置了一个包罗万象的功能,将所有子域转移到我的主域,然后我可以使用 php 拉出该子域,如下所示:

<?php list( $username ) = explode( ".", $_SERVER[ "HTTP_HOST" ] ); ?>

现在,这是我的问题:

在我看来(我对这一切都很陌生)对我需要在每个页面上执行的每个查询执行基于字符串的搜索将是缓慢且低效的。例如,不得不抬头SELECT * WHERE username = sampleuser AND profile = 2745

但这是真的吗?什么是最有效的方法?使用子域的网络应用程序通常如何处理这种事情?

提前非常感谢大家。

4

2 回答 2

3

使用子域不是很有效。当您查看 SEO 时。您有许多具有相同内容的域和站点。

在你的情况下,我更喜欢重写

www.xxxxx.com/username

然后您可以将用户名重写为您的脚本。问题是当您为每个用户创建一个新的子域时可能会出现问题。可能是用户缓存了 DNS 请求,访问该站点需要花费大量时间。

第二个是您应该尽可能少地查询数据库。将用户名或 ID 保存在会话中。

$_SESSION['username'] = 'username';

然后您可以进行查询以从数据库中获取信息。

编辑:当你需要更多性能时,你应该看看MongoDB或使用Memcache来存储/缓存东西。

于 2012-12-20T00:12:55.493 回答
0

“使用子域的网络应用程序通常如何处理这种事情?”

通常每个子域在 web 引擎(apache/IIS)中使用重写模块之类的东西映射到特定的 IP 地址或特定的根。所以 blog.* 子域可能指向 WordPress 应用程序的根目录。

在您的情况下,除非您为每个用户设置不同的页面集,否则这听起来并不适用。即,如果他们都有一个“帐户详细信息”页面,并且只有数据不同,那么子域唯一发挥作用的地方就是查询或您生成的 URL。

在您的情况下,您拥有概念上的动态路线。通常您只需查询一个表以确定要提供的内容。在您的情况下,它不仅仅是数据,而是内容。有时,路由使用为查找组织良好的数据结构全局缓存在内存中,在您的情况下,通过用户名进行查找,该用户名返回用户表的主键。然后,无需查询用户的表,您就有了通过外键引用该用户的数据的过滤条件。因此,如果导航到“喜欢”页面,您可以“选择 * From Likes Where UserKey = $userKeyFromLookup”。您可能希望为允许 O(1) 查找的查找选择内存中的数据结构。即恒定时间查找。

在我看来(我对这一切都很陌生)对我需要在每个页面上执行的每个查询执行基于字符串的搜索将是缓慢且低效的。例如,必须查找 SELECT * WHERE username = sampleuser AND profile = 2745

每个用户的个人资料 ID 是否唯一?如果是这样,那么您在查询中不需要用户名。仅个人资料 ID 就会为您提供独特的响应。如果有人访问用户名。. 如果没有配置文件 ID,那么您要做的第一件事就是获取 profileID,然后重定向到同一页面,但现在在 URL 中使用该参数,以便所有其他导航都在该 profileID 的上下文中完成。

不过,我同意 Stony 的观点,我认为您会发现夸克具有动态子域。我会将用户名放在 URL 中。

于 2012-12-20T00:26:33.550 回答