为大型 Web 应用程序选择哪种数据库策略



我必须重写一个在 32 台服务器上运行的大型数据库应用程序。硬件是最新的,每台机器都有两个四核至强和32 GB的RAM。

该数据库是多租户的,每个客户都有自己的文件,每个文件大约 5 到 10 GB。我在这个硬件上运行大约 50 个数据库。该应用程序对网络开放,所以我无法控制在负载上。没有真正复杂的查询,因此如果有更好的解决方案,则不需要 SQL。

数据库每天午夜通过FTP更新。数据库是只读的。C#是我最喜欢的语言,我想使用 ASP.NET MVC。

我想到了以下选择:

  • 使用两台运行 SQL Server 2012 的大型 SQL 服务器为 32 台服务器提供数据。在运行 IIS 托管的 32 台服务器上,提供 REST 服务。

  • 对数据库进行非规范化,并在每台 Web 服务器上使用 Redis。使用书套作为 Redis 客户端。

  • 结合使用 SQL Server 和 Redis

  • 将 SQL Server 2012 与 Hadoop 结合使用

  • 在没有SQL Server的情况下使用Hadoop

只读数据库在不失去可维护性的情况下获得最佳性能的最佳方法是什么?在这种情况下,Map-Reduce有意义吗?

重写的原因是,使用 ISAM 技术编写的旧应用程序太慢C++,界面是老式的,不适合从网站上使用,尤其是在使用 ajax 时。

该应用程序使用具有许多表的关系数据模型,但可以编写一个 accerlerator 表,其中可以执行所有查询,并且可以通过简单的键查找从其他表获得所有其他信息。

几个问题。 您正在重写此内容时出现了哪些问题? 查询模式是什么样的? 听起来你最喜欢使用SQLServer +缓存(memcached)来解决导致你重写它的任何问题。 Redis 很好,但你不需要数据库处理查询的数据结构功能,如果它只用作缓存,你也不需要持久性。 在不了解这个问题的情况下,我想我会看看MongoDB来处理数据分片,冗余存储和缓存,所有这些都在一个解决方案中。 此设置中没有特殊的机器,可以配置冗余,负载应该平衡良好。

这个问题几乎是一篇评论文章。 我个人更喜欢带有 TimesTen 的 Oracle RAC 进行缓存,如果性能是最重要的,并且如果白天的并发读取量很高。

这里有一份白皮书...

http://www.oracle.com/us/products/middleware/timesten-in-memory-db-504865.pdf

不过,磁盘子系统的规格以及跨物理磁盘的索引和数据文件的组织可能是最重要的因素。

最新更新