首先,我不是数据库专家,而是承包商。我聘请了一位(优秀的)程序员,但由于我们遇到的一些问题以及我正在阅读的所有信息,我现在对数据库设计的某个部分有一些疑问。开始吧。
我们构建了一个住宅站点,该站点使用解析器来处理所有数据并将其存储在 ms-sql 数据库中。每天提要包含大约 70.000 条记录,其中大多数还附有图片(平均 3 张)。图片大小从 30kb 到 400kb 不等。数据库有大约相同数量的记录。大约有 400 个新对象需要处理。这意味着每天都必须输入数据库中的所有记录,以查看数据是否已更改、对象是否已删除或是否为新对象并因此必须插入。图片存储在数据库中。提要在具有 32GB 内存和 SSA 磁盘的双四核机器上处理。数据库现在大小为 600GB。
目前,我们每天有大约 3000 名用户查看 6 所房子,平均每个用户查看 10 张图片。
这是我们所经历的: - 整个解析过程大约需要13个小时。- 我们在日志中收到很多超时错误 - 我们退出了一些死锁错误 - Google 抱怨超时错误,因此索引的页面不多。- 由于某些目录的加载时间超过 10 秒,谷歌将该网站评为缓慢。
我个人认为这与数据库中的图片和一些错误的查询有关。但在我开始向我的程序员抱怨之前,我想听听你对此的看法。在此先感谢您的时间。
来自我的程序员的更新:这是有关表结构的一些信息。图像有 2 个表,1 个称为 imageinfo,用于查询图像(例如获取图像 ID 和内容类型的列表)和一个包含图像 ID 和 BLOB 的图像表。imageinfo 表与图像表具有相同的 id(1:1 关系),并具有一些额外的信息,例如图像的名称、类型和哈希值。该散列在解析器过程中用于确定图像是否已更改。因此,只有在解析器进行插入/更新/删除并且站点访问图像时才会触摸图像表。访问和下载一张图像所需的时间约为 350 毫秒。