Database 速度需求:最佳数据库解决方案

Database 速度需求:最佳数据库解决方案,database,Database,我想创建的是一个更大的数据集合上的巨大索引。数据是一个巨大的图像集合(我指的是数百万张照片!),我想在所有独特的图像上建立一个索引。 所以我计算每个图像的散列值,并将其与图像的宽度、高度和文件大小一起附加。这将为每个图像生成一个非常唯一的密钥。这将与图像的位置相结合,或者在重复的情况下与位置相结合 从技术上讲,这完全适合单个数据库表。文件名上有一个唯一的索引,再加上哈希宽度高度大小上的一个非唯一索引就足够了。然而,我可以使用现有的数据库系统来解决这个问题,或者只编写自己的优化版本。它将是一个单用

我想创建的是一个更大的数据集合上的巨大索引。数据是一个巨大的图像集合(我指的是数百万张照片!),我想在所有独特的图像上建立一个索引。 所以我计算每个图像的散列值,并将其与图像的宽度、高度和文件大小一起附加。这将为每个图像生成一个非常唯一的密钥。这将与图像的位置相结合,或者在重复的情况下与位置相结合

从技术上讲,这完全适合单个数据库表。文件名上有一个唯一的索引,再加上哈希宽度高度大小上的一个非唯一索引就足够了。然而,我可以使用现有的数据库系统来解决这个问题,或者只编写自己的优化版本。它将是一个单用户应用程序,其主要目的是检测我何时向收藏中添加了重复图像,以便警告我收藏中已经有该图像,并显示其他副本所在的位置。然后,我可以决定继续添加副本或放弃它

我以前写过哈希表实现,一旦您知道需要注意什么,就不会那么困难了。所以我可以为这些数据实现我自己的文件格式。我不太可能需要为这些图像添加更多信息,我对类似的图像不感兴趣,只对精确的图像感兴趣。我也没有在这个文件中存储原始图像,只是散列、大小和位置。 根据经验,我知道这可能运行得非常快。我以前做过类似的事情,并且已经做了将近三十年,所以我很可能会选择这个解决方案

但我想知道。。。对现有的数据库系统(如SQL Server、Oracle、Interbase或MySQL)执行同样的操作,性能是否仍然足够高?在这个数据库中将有大约750 TB的图像被索引,在一个小表中大约转换为3000万条记录。甚至值得考虑使用常规数据库吗

我怀疑这个项目的数据库的可用性。数据量巨大,但结构非常简单。我不需要多用户支持或大多数数据库提供的大多数其他功能。所以我认为不需要数据库。但我对其他程序员对此的看法很感兴趣。(尽管我希望大多数人会同意我的观点。)



这个项目本身,在我的脑海中仍然只是一个想法,应该是一些工具或explorer的附加组件或其他东西。基本上,它为我连接到系统的任何外部硬盘建立索引,当我将映像复制到此磁盘的某个位置时,它应该告诉我映像是否已经存在于该磁盘上。这将允许我避免用重复的磁盘填满备份磁盘,尽管有时我希望添加重复的磁盘。(例如,因为它们是一个系列的一部分。)因为我喜欢创建自己的渲染艺术品,所以我有很多图像。另外,我从1996年开始用数码相机拍摄数码照片,所以我也收集了大量照片。添加一些其他大型集合,您很快就会意识到数据量将是巨大的。(是的,我的收藏中已经有大量的副本…

由于您正在考虑的是单用户应用程序,我可能会看一看。我想,它应该很好地符合你的其他要求。

除非你知道你所做的一切后果,否则我不会自己动手做

例如,事务一致性并不是微不足道的

我建议您以这样一种方式设计您的代码:后端可以很容易地在以后替换,然后使用合理的方式运行(SQLite是一个很好的开始选择),以尽可能合理的方式开发它,然后尝试在备用备份存储区中开槽

然后分析差异,并对其运行回归测试,以确保您的数据库不比SQLite差

现有的数据库解决方案往往会胜出,因为它们经过多年的改进和微调才能获得好处,一次天真的尝试可能会更慢、更麻烦、做得更少,同时会将您的开发负载增加到纯粹的巨大的比例

  • 优化的第一条规则是,不要谈论优化
  • 优化的第二条规则是,不要谈论优化
  • 如果您的应用程序运行速度比基础传输协议快,则优化结束
  • 一次一个因素
  • 没有marketroid,没有marketroid时间表
  • 只要有必要,测试就会继续进行
  • 如果这是您在优化俱乐部的第一晚,您必须编写一个测试用例
  • 此外,对于数据库,有一件事你必须根深蒂固

    速度不重要

    您的数据在需要时就在那里,这一点很重要

    当您确信您的数据将始终存在时,您可能会担心诸如速度之类的琐碎问题

    散列 您还抱怨将使用image SHA/MD5等来消除图像的重复数据。这本身就是一个错误的概念,文件哈希只能判断文件是否不同,而不能判断它们是否相同

    这个逻辑类似于让30个人掷一枚硬币,你会看到第一个人得到了人头,因此决定删除所有其他得到人头的人,因为他们显然是同一个人


    虽然你可能认为不太可能有两个不同的文件具有相同的散列,但你的几率与赢得彩票一样大。你中彩票的几率很低,但每天都有人中彩票。不要让它成为你。

    我刚刚在我的笔记本电脑(Core 2 Duo T5800 2.0 GHz 3.0 GiB RAM)上测试了PostgreSQL的性能。我有一张桌子,桌上的人比我多一点