c# – MySQL BLOB图像数据逐渐丢失?
在mysql中,MyISAM类型表有一个Image类型为mediumblob并存储捕获的图像.我得到了一些有趣且有问题的图像.一些图像逐渐丢失数据.
my.ini max allowd packet size set max_allowed_packet = 8M 这就是问题 当C#应用程序每次从服务器获取数据时,这些图像逐渐丢失数据并随机大小.我在100000个图像数据中得到了10-12个这样的坏图像. 这种行为可能是什么原因?任何人都有任何想法/解决方案如何解决/避免这个问题. 更新1:
将bytes数组保存为数据库作为中等blob数据.从数据库中检索数据时,我正在转换读取器数据
最佳答案
罪魁祸首是MyISAM存储类型.
我们使用InnoDB存储来存储一百万个图像并进行压力测试,我们得到了正确的结果.由于InnoDB符合酸性,因此无法正确检索文件或完全没有检索到文件(小于0.01%). 当我们转移到MyISAM时,故障率增加到20%,有损数据和您的情况一样.原因是,MyISAM使用表锁,因此当写入正在进行时,整个表被锁定,并且在超时的情况下,它会覆盖导致数据丢失的事情. 我们现在已经将所有内容都转移到了MS SQL,因为InnoDB运行良好,但它仍然没有重复使用已删除的文件空间,因此InnoDB不断增长. MS SQL express限制为10gb,因此我们创建了4-8gb的页面,并在那里存储blob.我们有自己的自定义复制,通过网络使用相同的配置在三台服务器上复制文件. 由于许多原因,将文件存储在磁盘上是不好的,每个人都在说文件系统是为高性能设计的,并且可以存储数百万个文件,但事实并非如此,当你有超过10万个文件时,驱动器无法更快地执行.它们在一个大文件和1000个较小文件中表现良好.目前我们存储了1000万个文件并将其存储在db中更有意义,因为db对查询进行了优化并且执行了良好的缓存.您可以在http://akashkava.com/blog/127/huge-file-storage-in-database-instead-of-file-system/阅读更多内容 这就是MongoDb,Hadoop,Azure Blob Store,Haystack和Amazon S3发明的确切原因. (编辑:4S站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- mysql – 用于计算每天注册用户数的SQL查询
- mysql – 如何在Hibernate中为每个公司创建一个customerNum
- 当表结构在MySQL中不匹配时使用INSERT INTO SELECT
- mysql – 使用XML和XSD创建填充的数据库
- mysql – 在更长的时间段和时区存储统计信息
- mysql – ActiveRecord在Ruby 1.9.2-rc1下以ASCII-8Bit返回
- mysql – 拥有“额外”数据库查询有多糟糕?
- mysql – 在查询和LIMIT之后应用ORDER BY
- php – 我可以在MySQL中为一个表的每一行加入两个只有一个匹
- php – MySQL字符串比较