首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >文件结构,以避免数据损坏

文件结构,以避免数据损坏
EN

Stack Overflow用户
提问于 2012-04-18 00:47:55
回答 3查看 1.6K关注 0票数 4

我目前正在为监控系统开发升级我们目前的媒体存储(以存储视频/音频/元数据),我正在重新设计录制结构以实现更强大的解决方案。

我需要创建一些存储在数据文件中的数据的索引数据,所以我创建了一个索引文件结构,但我担心硬盘故障(想象一下,如果在写入索引文件的过程中断电,它将成为corrup,因为数据很可能是写入了一半)。我已经设计了索引的存储方式,但我关心的是电源故障或磁盘故障导致的数据损坏

那么,有没有人知道在写入时避免数据损坏的技术?

我已经搜索了一些,但没有找到好的解决方案,一种解决方案是创建写入文件的所有内容的日志,但这样我每秒的I/O会多得多(我也关心每秒的I/O数量,系统应该尽可能少地执行)。

我想到的是在索引文件中复制敏感数据以及时间戳和校验和字段。例如:

Field1 Field2 Field3时间戳校验和

Field1 Field2 Field3时间戳校验和

因此,我将数据写了两次,如果当我读取文件时,第一组字段被破坏(校验和不匹配),我有第二组字段应该是正常的。我相信,如果在中间停止写入,就会发生损坏,所以,例如,当软件正在写入第一组字段而断电时,第二组仍然完好无损……如果在写入第二个集合时出现电源故障,则第一个集合已经完好无损。

你们觉得这个解决方案怎么样?它能避免数据损坏吗?

顺便说一句,我不能将任何类型的数据库用于此类存储或事务性NTFS,因为部署具有事务性NTFS的系统的限制

欢迎有任何想法,谢谢!

EN

回答 3

Stack Overflow用户

发布于 2012-04-18 02:01:52

忽略您的问题中关于无法使用数据库的部分:)

您可能会找到感兴趣的SQL Server2012的FileTables。您可以将文件存储在数据库外部的文件夹中,但仍然可以像访问数据库内的文件一样访问这些文件。您可以使用数据库将新文件插入到该目录中,或者简单地将文件复制到文件夹中。你的数据库不会因为视频文件而变得很胖。如果数据库服务器软件宕机,它们也将无法访问。您的帧索引可以是单独的.jpg文件(或其他文件),这些文件也可以由FileTable引用,并通过外键索引到主视频文件。因此,帧索引表是非常直接的。

因此,您消除了写入文件和维护日志以查看是否存在故障的DB开销。如果操作系统因为断电而不能写入文件,那么数据库就不会有机会。您可以进行目录比较,并使用健壮的实用程序来移动文件,并且如果写入的任何部分失败,都不会删除源文件。

票数 2
EN

Stack Overflow用户

发布于 2012-04-18 02:46:21

它不能避免数据损坏,因为损坏可能发生在任何一个或两个字段集上。

我认为你最好不要复制“敏感数据”,而是分两步写入数据,第一步将“校验和”字段写为空,第二步用与数据匹配的校验和更新校验和。此校验和将用作“事务提交”标志,以确保数据完整性。

当您读取数据时,您将忽略所有未提交的索引集,我的意思是,在校验和不匹配的地方。

然后进行大量的测试和微调,在过程的每一步强制数据损坏,并保存随机数据。我个人认为测试需要大量的工作,因为失败是随机的,这就是为什么人们建议你使用经过多年测试的数据库。

请注意,虽然它增加了一些保护以防止某些类型的数据损坏,但它并不完美,您可以添加其他安全层来保护您的数据,包括数据复制、完整性检查和外部配置,包括无中断、raid系统、定期备份。

围绕“交易”的理论太多了。

搜索“原子事务算法”以获取更多详细信息。

重新考虑使用数据库,重新考虑使用日志,甚至重新考虑使用文件系统来存储信息。

票数 2
EN

Stack Overflow用户

发布于 2012-04-18 02:50:38

您可以使用某种事务逻辑。在小块中创建索引,首先使用临时文件。当您完成一个块(文件)时,检查完整性,如果通过测试,则将其复制为实际的索引文件。此时,您可以分发经过验证的块的几个副本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10195476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档