2012-03-26 74 views
1

这是我在stackoverflow的第一篇文章〜 我正在寻找正确的数据库/引擎给我这么一个小背景: 通过浏览很多问题和答案后,我发现很多数据库对于特定类型的网站都是最好的。另一方面,我看到的很多帖子都是从2011年开始的,所以也许有新的选择!Percona,MariaDB,MongoDB,Couchbase和其他替代品

我使用这个数据库的网站将需要大量的读取和一些写入。因为它需要大量的READS,并且我一般都知道哪些数据部分将主要在某个特定时间使用,所以我正在考虑使用Redis或Memcache之类的东西。 (我也看过类似VoltDB的东西,并意识到我不可能或更多,所以不想将所有数据存储在RAM上)

我不擅长从数据库 - >服务器层所以任何正确方向的光线都会有帮助。我相信我在体系结构上最好的选择就像是我需要的每个对象的一个​​键/值,并且将当前真正需要的东西放在RAM中,每当我需要或不需要某些数据时释放内存了。

我希望人们能给我一些建议。

  1. 到目前为止,是否有任何新的Percona或MariaDB或MongoDB或Couchbase的替代方案?

  2. 到目前为止,是否有任何新的Percona或MariaDB或MongoDB或Couchbase的替代方案?

  3. 有没有这些postgresql的替代品呢?任何我看不到多少的原因?

    **即使是关于混合方法或其他接近架构的方法的信息也非常受欢迎。

非常感谢您的帮助!

回答

0

最好的办法是在中间层实施一个标准的SQL后端,并采用积极的缓存。您可以使用Memcached或JCS进行缓存。

如果您的应用程序在java中,请小心缓存时Java对象的序列化成本(编组/解组成本)。有几个快速序列化器可以替代Java提供的标准序列化器。

如果您的应用程序是基于Web的,则可以使用Varnish实施前端缓存。

0

我同意Srini。使用标准的数据库解决方案(MySQL可能是最常见的)+高速缓存,并且您不希望使用任何少于一年的解决方案。

0

缩放读取通过缓存完成。反常聚集也是常见的方法。 像Mongo这样的NoSQL解决方案不是关于读取扩展,而是关于写入扩展,以及关于灵活的模式(因为它们通常是无模式的)。当然,像MongoDB这样的文档商店可以很容易地在单个查询中读取整个数据,但是如果这对您的应用程序有利,则取决于您拥有的数据和关系。因此,如果您想知道要选择什么类型的存储,请查看您的数据模型。

在大多数情况下,如果您唯一关心的是读取的含义,那么带有内存缓存的RDBMS(memcached,redis)就足够好了。

6

我个人首先将一个大的应用程序从mysql切换到mariadb,然后切换到postgres。

我认为这是我曾为这家公司做过的最好的事情。 PostgreSQL真的可以与那里所有的大数据库(Oracle,MS-SQL)相媲美。优化在许多不同的层上也是可能的。

我真的不会使用MySQL,如果你不必。 MySQL确实受到了损害,因为甲骨文收购了它(顺便说一句,我认为它不是一个很好的数据库)。

NoSQL(如Mongo,CouchDB)是一个选项,因为它快速简单。但是,如果你必须处理关系,SQL会是更好的选择,我想。但我不是经验丰富的NoSQL用户。

在我们公司,我们曾经使用memcached,这是一个非常好的选择,因为它非常快。但我们不得不放弃它,因为它不是太动态。但这真的取决于你的问题。


编辑:自从我被要求详细阐述PGPostgreSQL)与MySQL辩论我的观点,我还写了:

我觉得一个很好的理由在选择PGMySQL是,你不会找到任何关于如何从pg切换到mysql的指南。 :-)这是一个小小的舌头,但我真的认为它有一些事实。我不会在这里讨论基准,因为我不认为这是一个很大的差异,相当和恕我直言,大多数时候并不重要。

基本上我认为与MySQL相比,pg是一个非常干净的数据库。 MySQL有点像PHP:接受输入并用它做一些事情。但neve失败!例如,MySQL使用的datetime conversions有时候可怕。错误的日期,你的数据库中有0000-00-00 00:00:00。也许有人可以,但我不是。我真的很喜欢PG的索引,它们是far better than MySQL's

PG的功能通常要好得多。我觉得在这个岗位Postgres 9.1 vs Mysql 5.6 InnoDB?一个答案有一个很好的总结:

  • 延迟约束
  • 检查约束
  • 表函数(SELECT * FROM创建my_function())
  • 公用表表达式
  • 递归查询(使用通用表格表达式)
  • 开窗功能
  • 基于功能的索引
  • 部分指数
  • 的事务表全文搜索
  • GIS功能的事务表
  • 减号或INTERSECT操作

其中有些是在某些情况下非常有用。

我认为在MySQL中唯一更好的是复制。我不喜欢那个PG曾经有9.0之前没有内置的复制和我9.0后不喜欢复制的事实,因为它是不非常定制(`我的。不过,这只是一个细节。

我最后要说的一点是:MySQLPG更容易启动。Postgres稍微复杂一些,因为它有更多的功能。对于一些人来说,PG模式概念可能有点奇怪。直接适用于初学者

因此,如果你正在寻找一个坚实和良好的数据库,可以从简单的Web应用程序使用复杂到安全的网上银行到GIS系统选择PostgreSQL。如果你正在用ORM编程一个应用程序,你可以选择MySQL,这个应用程序只有几张桌子,你根本不想进入数据库的细节。

+2

强烈不同意MySQL已经甲骨文下遭遇。 MySQL 5.5是MySQL历史悠久的最佳版本。期。 – 2012-03-26 21:16:10

+1

也许这是真的,但5.5很长一段时间了。我说'遭受'的原因是因为许多核心开发者在收购之后离开(并创造了mariadb)。这可能不会成为未来几个月/年的问题,但数据库应该在10年甚至更长的时间内得到增强(或者至少修正了这些bug)。 – 2012-03-26 21:52:58

+0

我一直在寻找postgres在MySQL上的优点的平衡观点。你能否赐教我? – Duke 2012-08-08 17:49:24

2

Couchbase把分布式缓存CouchDB中的前面,与另一子系统,用于聚类支持。这是非常关键的价值存储(像memcached),所以不是强关系数据的最佳选择,或者如果你需要交易。

如果只有你的整个数据集的一部分将在任何一个时间点上使用(如Farmville的那里是只有少数人在任何指定时间登录),它会奇妙的工作,因为它会自动缓存到其memcache组件,并且还提供永久存储而不需要很多调整。

你将不得不看磁盘读取队列,一旦你的应用程序变得很大,并添加更多的服务器,如果与高速缓存未命中的读请求比磁盘读取吞吐量更大。

刚才寻找到蒙戈,但Couchbase是如此简单,它是难以抗拒。