首先,我不是数据库专家,而是承包商。我聘请了一位(优秀)程序员,但由于我们遇到的一些问题以及我正在阅读的所有信息,现在对数据库设计的某个部分有些怀疑。开始吧。使用blob与否,性能问题
我们建立了一个房屋网站,它使用解析器来处理所有数据并将其存储在ms-sql数据库中。每天饲料中都包含大约70,000条记录,其中大部分都附有照片(平均3张)。图片大小从30kb到400kb不等。 该数据库具有大约相同数量的记录。大约有400个新对象需要处理。这意味着每天都必须输入数据库中的所有记录,以查看数据是否已更改,对象是否已被删除,或者是否为新对象,因此必须插入。 图片存储在数据库中。这些订阅源在具有32GB内存和SSA磁盘的双核四核机器上进行处理。该数据库现在大小为600GB。
目前,我们每天约有3000位用户查看6个房屋,平均每个用户查看10个图像。
这就是我们所遇到的: - 整个解析过程大约需要13个小时。 - 我们在日志中发现了很多超时错误 - 我们得到了一些死锁错误 - Google抱怨超时错误,结果索引的页面不多。 - 由于某些目录的加载时间超过10秒,Google对该网站的评分较慢。
我个人认为它与数据库中的图片和一些不好的查询有关。但在我开始向我的程序员抱怨之前,我想听听你对此的看法。 预先感谢您的时间。
来自我的程序员的更新: 以下是关于表格结构的一些信息。有2个图像表,一个叫做imageinfo,用于在图像上进行查询(例如获取imageid和content-type的列表)以及一个包含图像id和BLOB的图像表。 imageinfo表具有与图像表(1:1关系)相同的id,并且具有一些额外的信息,例如图像的名称,类型和散列。该分析程序使用该散列来确定图像是否已更改。因此,触摸图像表的唯一时间是从解析器插入/更新/删除并且站点访问图像的时间。 访问和下载一个图像所需的时间约为350毫秒。
无论什么执行速度都很慢......通常我不会使用blob并将文件/图像托管在单独的服务器上。数据库然后只是保存图片的位置。减少数据库大小,并减少一个服务器上的一切负担,即s3存储为您的图片 –