0

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

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

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

我考虑了以下选项:

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

  • 非规范化数据库并在每个 Web 服务器上使用 Redis。使用 bookleeve 作为 Redis 客户端。

  • 结合使用 SQL Server 和 Redis

  • 将 SQL Server 2012 与 Hadoop 一起使用

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

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

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

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

4

2 回答 2

1

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

这里有一张白皮书...

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

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

于 2012-06-30T23:44:17.927 回答
1

几个问题。你重写这个有什么问题?查询模式是什么样的?听起来您最喜欢使用 SQLServer + 缓存 (memcached) 来解决导致您重写它的任何问题。Redis 很好,但是您不需要 db 处理查询的数据结构功能,如果仅用作缓存,则不需要持久性。在不了解该问题的更多信息的情况下,我想我会考虑使用 MongoDB 来处理数据分片、冗余存储和缓存所有在一个解决方案中。此设置中没有特殊机器,可以配置冗余,并且负载应该很好地平衡。

于 2012-06-30T21:13:52.053 回答