ExpressionEngine:git:本地开发:远程数据库

11
对于那些试图通过git对ExpressionEngine网站进行版本控制的开发者,你们是如何处理数据库的?
在我有限的经验中,当多个开发者共同使用远程web服务器上运行的单个MySQL开发数据库时,页面加载速度非常慢。如果尝试这样做,页面加载可能需要5-10秒钟,使得开发变得极为困难。使用远程开发服务器可能更快。我正在尝试避免在远程MySQL服务器上工作,以便能够在任何地方工作,不依赖于互联网连接速度/质量。
想知道其他人是如何处理他们的MySQL数据库的。
您所有的开发者是否都从一个中央数据库运行?您是否像我们一样遇到了速度缓慢的问题?
您是否将数据库保存在版本控制下?您如何在多个开发者和多个分支之间处理导入/导出?
对于一个开发者来说,我可以很容易地进行导入/导出/提交数据库,但是一旦您添加了另一个开发者,情况就会变得非常混乱。期待听到大家对这个庞大主题的想法。
谢谢!
4个回答

7
似乎在使用远程数据库时,DNS请求失败导致了很多时间的浪费。
请使用start mysqld with --skip-name-resolve来启动您的MySQL服务器。(有关此主题的更多信息,请访问:http://dev.mysql.com/doc/refman/5.0/en/host-cache.html
对于我们与多个开发人员合作的项目来说,仍然使用远程数据库似乎是最好的选择。

感谢您的输入。我尝试了skip-name-resolve标志,但它并没有加速任何事情。当您使用远程数据库时,页面加载需要5-10秒钟吗? - Jacob Graf
2
事实上,如果您正在使用MAMP或MAMP Pro,则TCP监听器默认情况下已禁用,以提高安全性和性能。 - pvledoux
pvledoux,我错过了什么吗?你的回应如何适应这个问题? - Jacob Graf
@JacobGraf 抱歉我的回应有点粗鲁。skip-name-resolve仅为连接到Mysql的客户端禁用DNS名称解析。但是,如果您在本地使用MAMP / MAMP Pro进行开发,则无需使用TCP / IP,因为您可以通过套接字直接连接到Mysql。在Windows上,您可以使用共享内存而不是文件套接字来做相同的事情。 - pvledoux

5
我在开发中基本上都使用一个中央数据库。根据你使用的主机,速度差异可能不会很大。
显然,如果您没有对数据库进行更改,即仅进行模板开发,则同步数据库的需求不是很重要,因此您可以潜在地带起本地数据库副本。但如果您确实进行了一些更改,则必须记住重复任何数据库更改。
至于版本控制,我在我的基础存储库中保存了我基础EE安装的SQL文件的副本。除此之外,我通常不在Git中保留数据库副本,因此我不做太多的导入/导出等操作。

当从远程数据库运行时,每个页面大约会有5-10秒的延迟。我想知道这里是否还有其他问题。我理解它可能会慢一些(例如1秒的加载时间),但是5-10秒就太离谱了。我想知道是否还有其他问题导致它卡住了。我在一个WHM/cPanel专用虚拟服务器上。甚至不确定从哪里开始排除故障! :-) - Jacob Graf
是的,我绝对不是MySQL专家,曾经遇到过卡顿的情况。通常,在数据库池中使用高级技术的主机在外部访问时会非常慢,但这可能取决于具体情况。 - Jeremy Gimbel

2

在我所在的公司(4名开发人员),我们每个人都在本地运行自己的数据库。但最近我测试了Rackspace Cloud Databases(还有其他云数据库提供商),用于运行可能难以在小型笔记本电脑上运行的大型数据库。与运行自己的数据库服务器相比,它的成本相对较低,并且可以在一分钟内设置或删除。


有意思。我打算为了开发而研究它,然后在发布后将其移动到本地主机。谢谢! - Jacob Graf
1
我在MediaTemple (gs)账户上配置了一个远程MySQL数据库,但效果更差,所以我想尝试Amazon RDS。从微型实例开始。它比MediaTemple快得多,但只比我的常规VPS快一点。我想尝试一个小实验,所以我在RDS上配置了一个四倍的RAM实例(64GB RAM,超级实例)。如果我让它运行,它将花费我1700美元/月。我测试了一下,它比我的VPS好一点,但绝对不是值得花1700美元/月的水平,所以我放弃了它。 :-) - Jacob Graf

2
您最近查看过EE Profiler吗?根据其复杂程度,您的主页上可能会有大约20-80个查询。
问题在于,对于每个查询,MySQL必须执行远程数据请求、下载响应,并向ExpressionEngine呈现其数据。20-80次数据库往返是导致延迟的原因,我认为您无法做太多改变。当使用远程(我们网络外部)数据库时,我和您一样会遇到同样的延迟。
当MySQL在您的本地计算机或生产服务器上运行时,它没有额外的网络请求导致数据请求延迟。这就是区别所在。
至于解决方法,您所能做的只是将数据库移动到内部网络中托管。我们有一台模仿我们生产环境的Linux机器,用于分阶段测试。由于它位于我们的网络上,我们可以在database.php文件中使用本地IP地址。这样速度要快得多
我们仍然存在频道/字段/条目的问题。当开发人员正在开发新部分时,他们可能需要创建新频道和字段和/或新条目。当我们准备将该功能推送到生产环境时,我们必须在生产服务器上手动进行这些更改,因为没有可靠的导出方式。我对这个附加组件很有希望,不过---我们拭目以待。

感谢您详细的回复!完全明白了!唯一的问题是,通常情况下,如果我与开发人员合作,他们不在同一个州,更别提同一个办公室了!:-)如果有人能够想出一种破解版本控制数据库的方法,他们将赚很多钱。我也对Site Manager充满希望,但它不像类似于git的数据库同步工具那样无缝。 - Jacob Graf
同意。框架使用称为“迁移”的概念,它可以让您编写脚本来修改数据库。然后,您可以运行迁移脚本来进行更改。问题在于这可能会与数据产生冲突。即使您可以可靠地解决这些冲突,诸如条目ID之类的事情也无法匹配,这可能会破坏您的代码-这取决于您构建代码的方式。真正的难题。 - Jesse Bunch
哦,而且所有这些工作可能都超出了典型的电气工程师/开发人员日常知识范畴。 - Jesse Bunch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接