Sql server 是否使用blob,性能问题

Sql server 是否使用blob,性能问题,sql-server,performance,parsing,Sql Server,Performance,Parsing,首先,我不是一个数据库专家,而是一个承包商。我雇佣了一位(优秀的)程序员,但由于我们遇到的一些问题和我正在阅读的所有信息,我现在对数据库设计的某个部分有些怀疑。让我们开始吧 我们构建了一个住房网站,该网站使用解析器处理所有数据并将其存储在ms sql数据库中。每天提要包含大约70000条记录,其中大多数还附带了图片(平均3张)。图片大小从30kb到400kb不等。 数据库中的记录数量大致相同。大约有400个新对象需要处理。这意味着每天必须输入数据库中的所有记录,以查看数据是否已更改、对象是否已删

首先,我不是一个数据库专家,而是一个承包商。我雇佣了一位(优秀的)程序员,但由于我们遇到的一些问题和我正在阅读的所有信息,我现在对数据库设计的某个部分有些怀疑。让我们开始吧

我们构建了一个住房网站,该网站使用解析器处理所有数据并将其存储在ms sql数据库中。每天提要包含大约70000条记录,其中大多数还附带了图片(平均3张)。图片大小从30kb到400kb不等。 数据库中的记录数量大致相同。大约有400个新对象需要处理。这意味着每天必须输入数据库中的所有记录,以查看数据是否已更改、对象是否已删除或是否为新对象,因此必须插入。 图片存储在数据库中。feed在双四核机器上处理,该机器具有32GB内存和SSA磁盘。数据库现在的大小为600GB

目前,我们每天约有3000名用户,平均每个用户查看6栋房子和10张图片

这就是我们的经验: -整个解析过程大约需要13个小时。 -日志中有很多超时错误 -我们得到了一些死锁错误 -谷歌抱怨超时错误,因此索引页面不多。 -谷歌认为该网站的速度很慢,因为一些目录加载时间超过10秒

我个人认为这与数据库中的图片和一些糟糕的查询有关。但在我开始向我的程序员抱怨之前,我想听听你对此的看法。 提前感谢您抽出时间

来自我的程序员的更新: 下面是关于表结构的一些信息。图像有两个表,一个称为imageinfo的表用于查询图像(例如获取imageid和内容类型的列表),另一个表包含图像和BLOB的id。imageinfo表具有与图像表相同的id(1:1关系),并且具有一些额外的信息,如图像的名称、类型和哈希。该散列在解析器进程中用于确定图像是否已更改。因此,只有当解析器中有一个insert/update/delete并且站点访问一个图像时,才会触摸图像表。
访问和下载一个图像所需的时间约为350毫秒。

您告诉我们两个问题:

  • 进口缓慢
  • 浏览这个网站很慢
  • (2) 这很简单:您可能需要理解您的read查询并为它们编制索引。这绝对是可以解决的

    (1) 如果没有更多的细节,就很难说些什么。我知道你需要比较很多blob——除了实际数据之外,你还可以存储这些blog的压缩散列。这样,您就不需要检索blob进行比较,甚至可以为散列编制索引

    数据库中是否应该有图像?

    最大的优点是:一致且简单的备份,方便开发人员。最大的弊病是潜在的滥用。一般来说,您不能说图像属于文件系统。数据库对他们来说通常是好的,除非有具体的理由把他们放在其他地方


    我猜你对这些博客的使用被误用了,如果文件存储在文件系统中,你也会遇到同样的问题。

    你真的需要衡量性能对你的影响。如果不知道到底什么是慢的,你就不能希望开始修复它

    然而,如果您正在寻找从何处开始测量的想法,那么我会说看看导入过程,看看它在RBAR风格中做了什么。RBAR代表“一行接一行”,它恰当地描述了在单个行上运行的流程,而这些流程在集合中的工作效率要高得多

    我要检查的另一件事是,你实际上没有检查每个图像的内容,以确保它没有改变。如果你对这些数据进行二进制比较,我可以想象它会非常慢。如果你计算一个校验和并比较校验和,那么

    a) 您可以在SQL Server进程之外,最好在另一个框中计算该校验和。
    b) 您将能够在更精简的过程中检查更新的图像,特别是如果该校验和是适当索引上的
    INCLUDE


    但是,正如有人评论的那样,将图像存储在数据库中并不是最明智的想法。

    无论实现如何,它都非常缓慢。。。一般来说,我不会使用blob并将文件/图像托管在单独的服务器上。然后DB只保留pic的位置。减少了数据库大小,减少了一台服务器上的负载,可以做任何事情,例如为您的picsOke提供s3存储,谢谢您的回答,我会问他现在是否正在使用(索引基于读取查询和使用压缩散列。但你不认为从数据库中获取图像是一个好的开始吗?还是因为每天都要进行比较,所以最好将它们存储在数据库中。看,问题是,将有更多的提要,所以未来几个月会有更多的数据,我很担心我编辑了我关于博客存储的想法。我最大的建议是:看看你的查询和访问模式,这样你就可以找到(并证明)错误。优化它们。你会没事的。我有,但我所说的仍然是我的想法。现在我们需要对流程进行更全面的描述,以便发表更多的评论。。。