存储Web应用程序数据以了解应使用哪个数据库后端时,是否应遵循一般的经验法则? 在选择时,我应该考虑每天的点击次数,数据行数或其他指标吗?
我最初的想法是执行此命令的顺序如下所示(但不一定如此,这就是为什么我要问这个问题)。
- 平面文件
- 银行
- SQLite的
- 的MySQL
- PostgreSQL的
- SQL服务器
- 甲骨文
这不是那么容易。 唯一的一般经验法则是,当当前解决方案无法跟上时,您应该寻找另一种解决方案。 这可能包括使用不同的软件(不一定按任何全局固定顺序),硬件或体系结构。
使用像memcached这样的数据来缓存数据,可能会比切换到另一个随机存储后端获得更多的好处。
如果您认为自己将需要其中一种重量级工具(SqlServer,Oracle),则应从一开始就选择其中一种。 数据迁移非常困难。 从长远来看,仅从顶部开始并停留在顶部,您的花费就会减少。
我认为您的排名过于具体。 您几乎可以从平面文件之类的东西开始创建非常小的数据集,然后从DBM之类的东西开始到稍大一些的文件(不需要类似SQL的语法),然后再访问某种SQL数据库。
但是谁愿意做所有这些重写呢? 如果应用程序将从访问联接,存储过程,触发器,外键验证等中受益,则只需使用SQL数据库,而不管数据集的大小如何。
哪一个应该更多地取决于客户端的现有安装和可用的DBA技能,而不是所拥有的数据量。
换句话说,数据库的大小不是唯一的考虑因素,也许不是最重要的考虑因素。
对于这个问题,还没有明确的答案,但是总是使用平面文件并不是一个好主意。 您必须解析它们(我想),它们的伸缩性不好。 从一个合适的数据库开始,例如Oracle或SQL Server(或者MySQL,如果需要免费选项,则使用Postgres)是一个好主意。 只需很少的开销,以后您就可以省去很多工作和头痛。 它们还使您能够以非愚蠢的方式来构造数据,从而使您可以自由地思考如何处理数据,而不是如何输入/输出数据。
这实际上取决于您的数据以及打算如何使用它。 在我以前的职位之一中,由于存在本机地理位置和时区扩展,我们使用了Postgres,因为它允许我们使用多边形数据类型来管理数据。 对于我们来说,我们需要这样做,并且我们还想使用存储过程,视图等。
现在,我在另一个工作过的地方使用MySQL仅仅是因为数据是标准化的,标准的逐行数据。
SQL Server长期以来一直具有4gb的数据库限制(请参阅SQL Server 2000),但是尽管有此限制,它仍然是清除旧数据的中小型应用程序的非常稳定的平台。
现在,通过使用Oracle和SQL Server 05/08,我能告诉您的是,如果您希望获得稳定性,可伸缩性和灵活性的最佳选择,那么这两个是您的最佳选择。 对于企业应用程序,我强烈推荐它们(仅因为这就是我们现在使用的方式)。
要考虑的其他事项:
您的应用程序对数据库的利用率是最关键的。 主要是最常用的查询(SELECT,INSERT或UPDATE)?
说如果您使用SQLite,它适用于较小的应用程序,但是对于“ Web”应用程序,您可能适合较大的应用程序,例如MySQL或SQL Server。
编写脚本和Web应用程序平台的方式也很重要。 如果您在Microsoft平台上进行开发,则SQL Server是更好的选择。
通常,我会使用我所使用的任何框架通常都接受的东西。 因此,如果我正在执行.NET => SQL Server,则Python(通过Django或Pylons)=> MySQL或SQLite。
我几乎从不使用平面文件。
选择仅具有“后端功能”的RDBMS解决方案还有更多。 例如,具有承诺控制能力(使您可以回滚失败的事务)是一种能力。 原因。
除非您使用兆事务速率应用程序,否则大多数数据库引擎就足够了-因此,这成为您要为该软件支付多少费用,它是否可以在所需的硬件和操作系统环境上运行以及您拥有什么专业知识的问题在管理该软件。
那进展听起来很痛苦。 如果要在任何地方包括MS产品(特别是付费SQL Server),则最好使用整个堆栈,因为您只需要为其中的最后一个付费:
SQL Server Compact -> SQL Server Express -> SQL Server Enterprise (clustered).
如果最初将应用程序定位于SQL Server Compact,则可以保证所有SQL代码都无需进行修改即可扩展到下一个版本。 如果您的规模超过了SQL Server Enterprise,那么恭喜您。 这就是他们所说的好问题。
另外:返回并检查SO播客。 我相信他们简短地谈论了这一点。
这个问题确实取决于您的情况。
如果您可以控制要部署到的服务器,并且可以安装所需的任何服务,那么花时间安装MySql或MSSQL Express服务器并针对现有数据库框架进行编码,而不是针对平面文件结构进行VERSUS编码考虑。
那FireBird呢? 那将适合那个清单呢?
并且不要忘记解决方案的“客户”也必须具备的要求。 如果您为小型公司编写商业应用程序,那么Oracle可能不是一个不错的选择……但是,如果您为大型企业编写自定义解决方案,则该解决方案必须在多个园区之间共享数据,并且拥有一个规模庞大的IT部门,那么, Oracle vs Sql Server的决定将取决于客户最有可能已经部署了什么。
由于我们拥有来自Embarcadero的出色工具,因此如今的数据迁移并没有那么糟糕,因此我应该让客户需求来驱动决策。
如果可以选择SQL Server,那么从一开始便是一个不错的选择,主要是因为您可以使用可靠的过程和功能,并且数据库备份工具是完全可靠的。 在数据库内部尽可能多地封装逻辑(而不是使用任何语言)有助于提高安全性和性能-确实有一个很好的论点,就是始终使用插入/更新逻辑过程,因为这些使您不受注射攻击的影响。
如果可以选择的话,唯一一次我会考虑优先使用MySQL是使用大型的,相当简单的数据库,该数据库主要用于读取访问。 这并不是要谴责最近已显着改进的MySQL,如果没有选择,我会很乐意使用,但是对于具有更新/插入活动的更复杂的系统,MSSQL通常是更好的选择。
我认为您的名单是主观的,但我会玩的。
平面文件
银行
SQLite的
的MySQL
PostgreSQL的
SQL服务器
甲骨文
Teradata