我目前使用自己的MySQL数据库在单个VPS上运行Rails应用程序。该数据库还包含users表。我们目前正在构建第二个应该具有相同用户的应用程序。如果有人注册,则他有两个帐户。
然而,问题是第二个(PHP)应用程序必须在另一个位置托管。这里的最佳做法是什么?我可以直接连接到外部数据库而不会造成很大的延迟吗?我应该同步吗?在第一个创建API?
我正在寻找最可维护的方法。谢谢。
答案 0 :(得分:1)
您可以从第二个应用程序连接到数据库。 但是连接的延迟总是存在。 另一件事是你必须考虑安全性,因为世界上可以访问数据库。您可以将连接仅限制为第二个Web服务器。 为了减少延迟,您可以选择使用memcached或其他缓存,这样您就不必再次访问数据库。 您可以进行mysql复制并将主数据库作为主数据库,并在第二个应用程序服务器中设置另一个mysql并使其成为从属数据库。 第二台服务器的mysql与master同步,所有的写查询(更新,插入,删除等)都应该掌握。这应该减少数据库负载。
答案 1 :(得分:1)
您可以允许第二个主机访问第一个MySQL服务器。执行此操作的最佳做法(据我所知)将创建一个新用户帐户,为用户表提供所需权限,仅允许从第二个主机的IP或域访问它并使用安全密码。您将在MySQL服务器上运行此查询:
GRANT ALL ON mydatabase.users TO 'mynewuser'@'123.123.123.123'
IDENTIFIED BY 'mysecurepassword';
毋庸置疑,您将使用您的数据库和表名替换'mydatabase.users',将'mynewuser'替换为您想要访问的用户的用户名(您可以在此处放置任何内容,将自动创建用户), '123.123.123.123',第二个服务器的IP或域名,'mysecurepassword',密码长,密码好,最好随机生成。
您的第二台服务器现在可以在mydatabase.users表上连接到MySQL服务器并具有ALL
权限(您可以将其更改为所需的权限)。
MySQL 5.6 GRANT Syntax
Greensql.com on MySQL remote access best practices
为了最大限度地减少性能损失,我不会创建多个MySQL连接(尝试使用尽可能少的连接,最好只使用一个)。我不是100%以下,但我很确定减少你执行的单独查询的数量也是一个好主意。不要运行10个单独的插入,而是运行一个包含多个VALUES
段的插入,例如
INSERT INTO mytable(id, name) VALUES
(0, 'mia'),
(1,'tom'),
(2,'carl');
我确信MySQL Prepared Statements也可以帮助减少速度惩罚