在21世纪初,与他人共同创立了一家为黄页广告行业提供IT服务的初创公司。是如何以及为何最终进入黄页行业的,这是一个充满动作和危险的奇异而美妙的故事,最好留待另一篇博文或在大量饮酒时讲述。然而,尽管面临时间、努力和挑战,还是非常享受作为企业家的经历。必须克服的一个挑战与页面有关——大量的页面。
作为服务的一部分,提供了所谓的电子撕页,即实际广告放置页面的电子副本。因此,必须携带每个黄页出版商提供的所有页面。其中一些以单独的PDF文件提供,而另一些则根本没有提供。对于后者,取下实体书的装订,扫描每一页,然后对标题进行OCR识别并索引到SQL Server数据库中。无论是哪种形式,由于有如此多的出版商和页面,最终拥有数百万的单独页面文件。
正如在上一段中提到的,这些页面文件中的每一个都索引在一系列数据库表中,但需要的是在不增加检索和存储数据到SQL ServerBLOB的开销的情况下访问页面图像文件。因此,页面图像文件存储在快速RAID存储上的NTFS文件系统上。一切运作得很好,但有一件事除外——当文件存储在文件系统而不是SQL Server中时,两个数据存储之间就没有关系完整性。从索引表中删除一行,就会有一个孤儿文件。从文件夹中删除一个文件,就会有一个孤儿索引记录。保持尽可能多的完整性是一项持续的工作,包括夜间修剪过程、验证例程和报告。虽然很丑陋,但让它工作了。
在SQL Server2008的发布中,微软包括了对FILESTREAM BLOBs的支持,即存储在文件系统而不是SQL Server MDF文件中的二进制大对象。BLOB数据是数据库表中的一行的一部分,但它基本上变成了对文件系统上单个文件的引用。最大的优势是SQL Server在表行和数据文件之间保持关系完整性。这个奇迹对来说来得太晚了,因为初创公司在2011年倒闭了,但最近发现可以在一个当前客户的项目中使用它。
客户有无数的夜间流程和不断运行的服务,这些服务向相关方发送通知电子邮件。然而,他们的邮件服务器是外包的,有时由于服务器或互联网访问不可用,流程无法发送通知电子邮件。因此,他们正在寻找一种解决方案,以确保他们的电子邮件通知能够送达。第一个想法是使用MSMQ,因为它非常适合保证消息传递。但在与客户进一步讨论后,发现他们还希望能够记录消息以证明交付和频率报告,所以开始倾向于一个更以数据库为中心的解决方案。以前做过这个——大多数电子邮件消息信息可以存储在一行表中。