同一数据库上的多个应用程序实例

发布于 2024-08-12 11:07:48 字数 397 浏览 4 评论 0原文

我正在编写一个应用程序,我将把它作为服务和独立应用程序提供。 它是用 Zend Framework 编写的并使用 MySQL。

当将其作为服务提供时,我希望用户在我的网站上注册并拥有像 customer1.mysite.com、customer2.mysite.com 这样的子域。

我希望将所有内容都放在一个数据库中,而不是为每个用户创建新数据库。

但现在我想知道如何做得更好。 我想出了两个解决方案: 1. 每个表中都有用户 ID,只需将其添加到每个数据库请求的 WHERE 子句中即可。 2. 重新创建具有唯一前缀(如“customer1_tablename”、“customer2_tablename”)的表。

哪种方法更好?优点和缺点? 是否有另一种方法可以分离同一数据库上的用户?

莱昂蒂

I'm writing an application that that I'm going to provide as a service and also as a standalone application.
It's written in Zend Framework and uses MySQL.

When providing it as a service I want users to register on my site and have subdomains like customer1.mysite.com, customer2.mysite.com.

I want to have everything in one database, not creating new database for each user.

But now I wonder how to do it better.
I came up with two solutions:
1. Have user id in each table and just add it to WHERE clause on each database request.
2. Recreate tables with unique prefix like 'customer1_tablename', 'customer2_tablename'.

Which approach is better? Pros and cons?
Is there another way to separate users on the same database?

Leonti

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

悍妇囚夫 2024-08-19 11:07:49

我会坚持将所有表放在一起,否则使用单个数据库几乎没有任何意义。这也意味着您可以切实地允许某种跨站点交互。只要确保将索引放在区分字段(customer_number 或其他)上,就可以了。

如果表变得非常大且缓慢,请查看表分区

I would stick to keeping all the tables together, otherwise there's barely any point to using a single database. It also means that you could feasibly allow some sort of cross-site interaction down the track. Just make sure you put indexes on the differentiating field (customer_number or whatever), and you should be ok.

If the tables are getting really large and slow, look at table partitioning.

表情可笑 2024-08-19 11:07:49

这取决于您打算如何处理数据。如果客户不共享数据,按客户细分可能会更好;此外,您可能会获得更好的性能。

另一方面,当您想要更改结构时,拥有许多具有相同结构的表可能是一场噩梦。

It depends on what you intend to do with the data. If the clients don't share data, segmenting by customer might be better; also, you may get better performance.

On the other hand, having many tables with an identical structure can be a nightmare when you want to alter the structure.

情定在深秋 2024-08-19 11:07:49

我建议为每个用户使用单独的数据库。这使得您的应用程序更容易编写代码,并使 MySQL 维护(单个帐户的迁移、帐户删除等)变得容易。

此规则的唯一例外是如果您需要跨帐户访问数据或共享数据。

I'd recommend using separate databases for each user. This makes your application easier to code for, and makes MySQL maintenance (migration of single account, account removal and so on.)

The only exception to this rule would be if you need to access data across accounts or share data.

远昼 2024-08-19 11:07:49

这称为多租户应用程序,很多人运行它们;请参阅

多租户标签

对于其他人的一些问题

This is called a multi-tenant application and lots of people run them; see

multi tenant tag

For some other peoples' questions

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文