这些要求目前是粗略的,但会感谢任何见解。 我们正在研究如何构build一个能够每天处理50个数据库数百万个查询的系统 – 特别是从编程语言和数据库select
它不是一个典型的网站,而是一个通过互联网访问的API /数据库。 速度至关重要。 应用程序将主要接收这些input(每个大约几kb),并且必须通过数据库查找来解决每个input。 只有几kb将被返回。
服务器将通过https / ssl运行。
添加:
*是的,还会有几千个插入。 没有洞察到,但可以说10-50,000 /天。
*也可能有更新,但不要使问题复杂化
*不,它不会在一天中平均分散。 典型的,在办公/醒来的时候,负载会更高? 也许遵循正常的曲线 – 还不知道。
*数据库大小将为15亿条目。
*客户端不会发送sql查询,而是一个数字来检索数据库条目。
好吧,让我们来看看。
语言:无关。 真。 无论如何,你都会谈论聚集的前端,如果你build立了正确的方向,那么你可以根据自己的需要扩大规模。 这就是说,显然远离INTERPRETED语言(如“股票”的PHP),并与那些谁是至less在及时编译(有没有一个PHP – 不知道)。 如果你希望API遵循标准,这意味着几乎所有基于SOAP / REST的前端 – ASP.NET / C#可能都是不错的select,因为系统对于Web服务具有非常强大的支持端。 不仅消耗他们。 你可能也想看看OData( http://www.odata.org/ )的一些东西。 我不确定在其他系统上对Web服务托pipe有多么好的支持 – 但是你可能需要一些有用的东西,而MS几乎是在推动Web服务。
数据库:看起来你读得很重。 这样做很好,因为这意味着您可以集中使用一个数据库进行集线器/分支设置,将所有写入和复制更改集中到其他计算机上。 可以在这些中分配读取。 这就是说,你在这里谈论大规模的设置。
现在的负载。 你说的是每分钟可能有100,000到250,000个查询的峰值(取决于你的峰值有多高 – 如果有很多人在工作开始时使用这个峰值,那么这个峰值会非常大)。 这大约是每秒4166个查询。
我个人认为你在SQL Server / Oracle集群的spce中。 无论如何,在SQL Server上,你可能会去:
如果这还不足以处理负载 – 但很可能是,如果你正确地进行数据库devise,并得到一些高端系统(双六核心opterons)。 您可以将一个单元的整个硬件安装到2个机架单元的高架上 – Supermicro有一些空间可以容纳24个2.5英寸硬盘,无需使用SAS – WD Velociraptors应该更高效,可以获得更快速的SSD和一个Adapted RAID控制器,你得到SSD作为读缓冲区;)应该是足够处理你的负载。
如果这样做效果不够好,你基本上需要更多的砰砰声。
类似的设置应该是可能的 – 好吧…不确定。 甲骨文 – 是的。 MySQL – 有人可以介入并回答。
你每秒查询的平均速率是600.你怎么知道交通模式? 所有查询都是在午餐时间进行的,只在特定时区的办公时间内进行?)假设所有查询均在8个工作日内均匀分布,则您将计划每秒钟查询2k个峰值。
数据库? 如果你必须。 一个简单的键/值存储将会有更高的性能。 (比如说)4KB的1.5Blogging是6TB。 试试这个架构:
5个前端与一组重复的数据存储进行交谈。 也许使用40个服务器,每个存储300 GB。 这意味着你可以失去任何一个主机,仍然继续服务。 如果你要在大多数情况下提供一个新颖的结果,我会把它加倍到80个服务器:每个查询至less要有一个磁盘寻道,我不会那么乐观,持续50秒寻找。
编程语言是不相关的。
build立一个每天处理5000万个查询的数据库系统并不是一件困难的事情。 使用一个大的cassandra服务器,我们可以达到每个核心每秒100个读取,而每个核心每秒可以达到25个。 根据你的数字50M我build议2 8核心系统。 为了获得性能数字,您将需要调整操作系统,磁盘设置和内存规格。
每列系列的内存预加载以及布局(无模式)调优都需要完成。
大型关系集群领域的其他select并不具有可扩展性,而且成本也会很高。
假设负载分布在一天之内(不太可能),您每分钟查看大约30,000个请求。 无论系统devise如何,这都是很多的。
但是,您已经指定了这个问题。 我们不知道数据库本身有多大,或者查询如何caching。 我们不知道你给人的界面, 你需要接受SQL,还是查询语言是可判定的? 我们也不知道数据库将要更新的频率以及对后续查询进行更新的重要性。
你可以通过更多的方式来限制问题,你会变得更好。
因为你没有提供很多细节,所以我也要保留这个简短的内容。 这个语言真的取决于你,虽然C Sharp / ASP.NET在这里很合适。 我会去一个像cassandra这样的noSQL数据库: http : //en.wikipedia.org/wiki/Cassandra_%28database%29
最后,读取与写入数量一定要相应地计划硬件(特别是驱动器的速度)。
尚未讨论的问题是在这里进行的查询组合是什么。 通常你可以通过重新devise应用程序来解决一半的问题。
例如,如果一个页面命中产生了100个查询,那么优化代码只做20个查询,那么如果页面碰到很多,也预先计算页面内容并且只根据需要重新计算(甚至每分钟会产生更多的效率)。 这可以产生100-1000倍的效率。 在这种规模的应用程序中,您必须将尽可能多的工作放到应用程序数据访问模式中,就像实际执行一样,否则对于组织而言,这将花费许多倍。 另外,如果在执行时性能很差,随着应用程序的增长,您将会遇到麻烦。 我从字面上看,通过应用成熟的应用程序和数据库devise原则,数据库运行从6小时减less到3分钟,而不仅仅是一次。
这方面有大量的专家; 这只是一个知道和谁交谈的问题。 在处理这些大小的应用程序的组织中工作的人员通常可以访问这些专家,因此上面的评论是可以接受的。
MySQL可以在体面的硬件上每秒处理数以千计的查询,而且如果应用程序能够将读取查询从更新查询中分离出来,那么为缩放读取设置只读从属设备非常简单。 无论什么语言,请确保应用程序支持持续连接和/或连接池。
什么是你的数据库的总大小和什么是你的硬件规格? 以上两点对于回答您的问题至关重要,因为在低等级的硬件和不合适的设置上,您将无法获得所需的性能标记。