Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 关于将web服务器用作缓存的建议_Sql Server_Webserver - Fatal编程技术网

Sql server 关于将web服务器用作缓存的建议

Sql server 关于将web服务器用作缓存的建议,sql-server,webserver,Sql Server,Webserver,我想听听关于以下设计的建议。这合理吗?这是愚蠢/疯狂吗 要求: 我们有一些分布式计算,可以处理有时高达50Mb的数据块。 因为计算需要很长时间,我们喜欢在一个大约20个节点的小网格上并行计算 我们每天产生大约10000块这样的二进制数据,并希望将它们保留一年。。。不过,大多数项目的大小都不是50Mb,因此每天的总空间需求约为5Gb。。。但我们想把东西保存得尽可能长,一年或更长。。。但是,现在你可以得到2TB的硬盘。 虽然我们希望保留数据,但这本质上是一个缓存。如果我们丢失数据,这并不是世界末日—

我想听听关于以下设计的建议。这合理吗?这是愚蠢/疯狂吗

要求:

我们有一些分布式计算,可以处理有时高达50Mb的数据块。 因为计算需要很长时间,我们喜欢在一个大约20个节点的小网格上并行计算 我们每天产生大约10000块这样的二进制数据,并希望将它们保留一年。。。不过,大多数项目的大小都不是50Mb,因此每天的总空间需求约为5Gb。。。但我们想把东西保存得尽可能长,一年或更长。。。但是,现在你可以得到2TB的硬盘。 虽然我们希望保留数据,但这本质上是一个缓存。如果我们丢失数据,这并不是世界末日——它只是需要重新计算,这只需要一两个小时的时间。 我们需要能够有效地获得在特定日期生成的所有块的列表。 从支持的角度来看,我们通常需要删除在特定日期创建的所有区块,或者删除在最后一小时内创建的所有区块。 我们是一家Windows商店-我们无法轻松切换到Linux/其他操作系统。 我们使用SQLServer满足现有的数据库需求。 然而,这是一家大型且相当官僚的公司,它的一些政策限制了我们的选择:例如,使用SQLServer的传统数据库空间在内部以极其昂贵的价格收费。分配2 TB的SQL Server空间非常昂贵。这主要是因为我们的SQLServer实例被备份、存档了7年等等。但我们不需要这种镀金的功能,因为如果丢失了,我们可以重新创建这些东西。本质上,它只是一个缓存,可以根据需要重新创建。 不允许在我们维护的机器上运行我们自己的SQLServer实例。所有SQLServer实例都必须由单独的组管理。 我们确实有一个相当小的事务需求:如果一个产生块的进程在中途死亡,我们希望能够检测到这样失败的事务。 我正在考虑以下解决方案,主要是因为它看起来很容易实现:

我们在windows文件系统NTFS上运行web服务器 客户端使用HTTP请求保存和加载文件,当进程需要相互发送blob时,它们只传递URL。 文件名是使用GUID分配的,但每个日期都有一个目录。因此,所有在2010年11月12日创建的文件都将放在一个名为20101112或类似的目录中。这样,通过获取某个日期的目录,我们可以使用正常的文件复制操作找到该日期生成的所有文件。 索引是由传统的SQL Server表完成的,它使用URL列而不是varbinarymax列。 为了保留事务性需求,创建blob的流程只有在成功地将文件上载到web服务器后,才会将相应的索引行插入SQL Server表中。因此,如果它中途失败或崩溃,这样的文件还不存在,因为用于查找它的对应行在SQL server表中不存在。 我喜欢大数据块可以通过TCP套接字生成和使用的事实。 总之,我们在SQL Server上实现BLOB的方式与它们在内部实现的方式大致相同,但在实际SQL Server实例上不会占用太多实际空间

因此,我的问题是:

这听起来合理吗。这疯了吗? 您认为在一个典型的windows NT文件系统上,它的工作情况如何每个有日期的目录有5000个文件,几百个目录,每天一个。最终会有成百上千的文件,但在任何一个特定目录下都不会有太多的文件。我们会开始担心硬盘碎片等问题吗? 如果20个进程都通过一个web服务器,试图同时写入20个不同的数据块,会不会开始冲击磁盘? 哪种web服务器最适合使用?它需要坚如磐石,在windows上运行,能够处理大量并发用户。 正如您可能已经猜到的,在公司限制之外,我可能会设置一个SQLServer实例,并且只需要一个带有varbinarymax列的表。。。但考虑到这不是一个选项,你认为这会有多好的效果


这有点超出了我通常的范围,所以我坦率地承认我在这个部门有点不在行。也许这是一个可怕的设计。。。但是,要理解它是如何工作的,维护和支持它似乎非常简单。

设计背后的理由是疯狂的,但它们不是你的:

NTFS可以处理您试图做的事情。这应该不是什么大问题。是的,如果磁盘空间不足,您最终可能会遇到碎片问题,但请确保您有copiou 这是一个很大的空间,你不应该有问题。如果你是Windows商店,只需使用IIS即可


我真的认为这种架构不会有太大问题。只要保持简单,就像你正在做的一样,事情应该会好起来。

你设计背后的理由是疯狂的,但它们不是你的:

NTFS可以处理您试图做的事情。这应该不是什么大问题。是的,如果磁盘空间不足,最终可能会出现碎片问题,但请确保有足够的空间,并且不应该出现问题。如果你是Windows商店,只需使用IIS即可


我真的认为这种架构不会有太大问题。保持简单,就像你正在做的一样,事情应该会好起来。

不接受答案-没有冒犯,但希望这可能会得到更多的意见/评论。。。我真的很想在这方面得到更多的建议。什么,你在办公室里有人在谈论你的解决方案吗?不,我们正在进行。再次标记接受。不接受答案-没有冒犯,但希望这可能会得到更多的意见/评论。。。我真的很想在这方面得到更多的建议。什么,你在办公室里有人在谈论你的解决方案吗?不,我们正在进行。标记它再次被接受。