javascript - 如何为多个子域上使用的项目设置数据库以及最好使用哪种技术?
问题描述
我正在尝试开发一个大型 Web 项目,该项目应该用于多个子域,其中子域代表客户端。我面临的问题是,我不知道此类项目的最佳或推荐解决方案。
项目(逻辑)应该类似于 slack.com。子域代表客户端(clientAlpha.slack.com、clientBeta.slack.com 等)。问题是,我可以想象多种解决方案,但它们都有很多缺点。
所有数据都将存储在我的服务器上 - 客户端只进行注册
如何为多个客户端组织数据库结构?
- 每个客户端都有自己的数据库,并以一些前缀命名。但是某种“超级数据库”存在问题,导致需要多数据库连接。多个数据库 = 数据库结构更新期间的丑陋工作。
- 一个数据库,其中包含一些“超级表”和每个客户端的许多相同表。我这是最丑陋的解决方案。与上述相同的结构更新问题。
- 带有“普通”表的“普通”数据库,其中客户端由 foreign_key 表示。此解决方案会影响 DB 的速度。
哪种类型的 DB 最好使用?我的意思是数据(行)的数量有什么限制吗?我对 MySQL 和 MongoDB 有很好的实践。没有 GPS,没有 blob - 只有“纯”数据将存储在表中(数字、字符串、布尔值、文本)
将 PHP 用于服务器是否仍然很常见,或者 PHP 对于新项目的创建已经死了?/或者好用JavaScript(node.js)?
我试图找到一些关于此的信息,但千人=千人意见:/
感谢您的指导和推荐。
解决方案
一些注释,非常值得评论:
- 打开的数据库连接不仅可以访问默认数据库。用于
datbase.table
访问其他数据库。 - 使用不同的(和唯一的)前缀或不同的数据库。不要混合它们。
- 如果使用不同的数据库,请使用一个特殊的数据库来存储全局数据(您的超级表)。
- 总是有数据库限制。最好的方法是估计您的需求,将它们乘以 10,然后查看数据库描述。无论如何,大多数磁盘和内存空间都是限制。
- 使用最佳成员制作干净的数据库布局(例如,选择
smallint
是否仅存储 0 到 1000 之间的值),为您的数据库访问创建示意图以确定键。在开始实施之前做这两件事。
推荐阅读
- java - 尝试获取实例时返回 null
- microsoft-edge-chromium - Selenium Java:我们在 Edge chromium 的 webdriver 中是否有 IE - Edge 功能代码,可以在 EC 浏览器上以 IE 模式运行测试
- python - Python 无法从环境变量中获取 GOOGLE_APPLICATION_CREDENTIALS (Windows)
- javascript - 如何在 Java 中创建多个下拉框?我想在这些代码行之后添加另一个下拉框
- java - UriBuilder 的依赖关系
- javascript - 如何使用 D3 制作响应式标签
- javascript - 类继承中的打字稿元组,丢失类型
- java - Spring boot lettuce client 调用了很多 COMMAND 操作到 Redis 集群
- angular - 我应该在我的角度应用程序中更正什么以使其运行?
- homekit - 如何从 HomeKit 传感器访问历史数据——或者自己记录这些数据