我应该扫描和存储客户I.D.每笔交易的BLOB中的卡和指纹?

时间:2011-11-12 14:37:38

标签: sql database database-design blob informix

enter image description here

我有一个用isql 7.32编写的典当应用程序。现在一项新法律要求客户的I.D.每次进行贷款或购买交易时,都会在原始打印的机票上记录指纹,并且这些机票必须保存5年。

平均而言,我的当铺每年处理超过6,000笔交易,因此5年的价值可以轻松超过30,000笔交易!这意味着如果我要为每笔交易存储图像并希望存储消耗大幅增加知道查询和更新是否会花费更长时间。

另外,我认为这些图像是BLOB(BYTE)数据类型,其中每个图像都是从数据库外部存储在一个单独的文件中,因此包含它们的目录将增长到数万个文件,这是一个问题?

到目前为止,我只存储了一个I.D.首次将客户添加到客户主表中时,每个客户的指纹和指纹。

手动复制I.D.会更好吗?典当的背面和指纹,一旦打印出来就买票,但继续存放一个。客户主表上​​的每个客户一个指纹用于客户身份验证?

据我了解,使用ISQL的“执行”屏幕,当执行查询时,在查询期间不会访问BLOB,而是在用户选择使用Perform的View命令查看它们时访问它们?

我应该如何设计此表以确保性能?

编辑:要问的另一个问题是:是否真的需要定期访问这些图像?..不!法律要求它的原因是执法部门有更多的信息可用于识别有人偷了财产并将其典当或卖给当铺,所以无论如何,他们会要求查看物品,相关的印刷文件以及相应的身份证件。什么执法部门通常会询问典当行所有者是否有任何与类似描述相符的被盗物品是否在当铺,因为在大多数情况下,行为人是未知的。因此,执行项目描述的查询,并且任何包含类似期望项目的交易,执法部门将希望查看项目并查看原始打印的交易文档以查看是谁完成的!

3 个答案:

答案 0 :(得分:1)

IANAL

您需要咨询法人,以确定当用户第一次进入商店时是否足以存储扫描的图像,或者每次进行交易时是否需要存储新图像。这两种系统都在技术上有效;法律故事可能大不相同。

我怀疑每次客户进来时你都需要拍一张照片。如果客户的身份证明文件(图片)随着时间的推移而变化,警察可能会对此感兴趣。


您需要处理各种问题。

Blob存储

  • Informix Standard Engine(SE)不支持BYTE或TEXT(或BLOB或CLOB)blob。
  • Informix Dynamic Server(IDS)将BYTE或TEXT blobs存储在与表的主数据相同的dbspace中的“IN TABLE”中,但存储在与行中的常规数据不同的页面上,或者存储在blobspace中专门用于存储blob。在任何一种情况下,行的常规数据都包含一个blob描述符,用于显示实际存储blob的位置。
  • IDS将BLOB和CLOB'智能blob'存储在专门用于存储blob的智能blobspace中。同样,描述符与常规数据一起存储在行中。
  • 在任何情况下,IDS都不会在文件系统中存储blob'松散'。它们存储在为DBMS保留的事务管理磁盘空间中。
  • 如果您愿意,IDS有一个虚拟表接口(VTI)可用于从文件系统访问文件。

实际的数据量取决于您需要存储的图像的分辨率。好消息是这些天磁盘空间相当便宜。假设您正在保存每个3 MiB的高分辨率图像。如果您需要存储30,000个,则需要大约100 GiB的磁盘空间。虽然您可能仍然可以购买更小的磁盘(我假设),但您不会很难在数百个GiB中找到可供使用的磁盘。所以,我认为存储不是一个主要问题。并且卷不会造成工作负载限制。如果它是每天30,000,那么我们需要讨论这些问题,但它仍然可能不是一个大问题。

用户界面

如果您需要能够显示扫描,则ISQL可能不是首选工具。您可能能够让系统正常工作以进行数据输入,也许身份信息可以合并到报告(门票)等中。但是,它可能不会是微不足道的。

我不是UI开发人员;我使用CLI程序,并在DBMS的内部工作。我不确定该建议作为前端。我可能会建议查看Genero(由IBM出售并由FourJs开发)。

表格设计

在表格设计方面,我有一个与现有表格分开的表来存储图像。它将包含一个SERIAL列以提供图像编号,并且您将外键图像编号列添加到相关的现有表中。图像表还可以保存带有图像的blob,可能还有一些关于图像的元数据(日期和时间,可能是客户ID,可能是扫描设备ID)。这样可以灵活处理法律人士认为必要的任何内容。如果您不必每次都拍摄图像,则可以重复使用ID号;如果你这样做,你仍然可以存储信息。您仍然可以从拥有一个单独的表来保存数据中受益(可能除了从ISQL UI的角度来看 - 但这成为担心使用ISQL的另一个原因)。一个好处是,如果您不想看到图像,您可以简单地将图像表保留在查询之外;如果您运行“SELECT *”查询,则不会意外地选择图像。

保留时间戳的记录

我不清楚法律是否要求您的典当行所有者在交易时保留原始票据的副本或者可以重新生成的电子副本是否足够。您可能需要考虑为记录添加时间戳 - 请参阅PublicTimeStamp.org了解一种可能的方法。这将为您提供一种相当简单的方法来独立记录电子文档是在特定时间创建的。

答案 1 :(得分:0)

我会将图像作为文件存储在硬盘上,并将文件名保存到数据库中。唯一的缺点是,如果您使用Crystal Reports等报告知道如何直接从数据库显示图片,那么您将无法使用该功能。

我猜你真的不需要对这些图像进行任何报道......你只需要能够在必要时向警方提供指纹图片。如果您只需查找人员指纹文件名然后通过电子邮件发送给警方,这将更容易做到。以BLOB格式获取数据将会更加有效。这不是一个大问题,而是另一个不存储在数据库中的原因。

因此,对于我来说,将它们作为BLOB保存在数据库中还是仅将它们保存为图片文件并存储文件名,这对我来说似乎毫无疑问。如果我遗失了任何东西,请告诉我,我会尽力给出更好的答案。

答案 2 :(得分:0)

弗兰克,你为什么不试试呢?您可能拥有自己的专业知识,或者如果不是,那么在不花太多钱的情况下让别人帮助您的项目不应该太大。

您只需要一个脚本来拍摄其中一个图片(或者如果您还没有图片就会有相似的图片),并将其插入一个blob字段中,即10,000个(或者您想测试多少个)记录。

至于设计表格,这里是我的建议:您希望垂直分区,以便更容易进行横向分区。这意味着,将blob单独放入一个表中(或者将其他字段特定于图片...就像是拍摄时的日期一样),并将id链接到其他数据。然后,您经常可以备份该表中的内容,然后截断旧记录。重要的是,如果你需要的话,你可以恢复那些数据,如果它减慢了系统的速度,那么没有理由把它留在那里。