【问题标题】:How Fast is Windows File System for Database Operations?用于数据库操作的 Windows 文件系统有多快?
【发布时间】:2012-10-09 20:13:09
【问题描述】:
我遇到了一个疯狂的想法,我想与你分享它并询问它的可行性,尤其是性能方面:
这个想法是通过以下方式管理对象数据库操作:
- 为每个以类名命名的类创建一个文件夹
- 为每个以子类名称命名的子类创建一个子文件夹
- 为每个以其唯一 ID 命名的对象创建一个文件
- 为每个以索引字段名称命名的索引创建一个子文件夹
- 为每个引用原始对象文件的索引条目创建一个快捷方式文件
- 通过非常快速的序列化器/解串器读取/写入二进制对象
- 通过重命名对象和快捷方式文件插入/更新/删除对象和索引条目
- 使用内存映射文件进行缓存/分页
- 查询将利用对已排序文件名的二进制搜索
更新:感谢大家的回复。我认为这甚至可以通过使用一些压缩/加密库(例如 7z)来改进,而不是处理 OS 文件系统。否则,到目前为止,您所陈述的所有担忧都是有效的。我想知道底层文件系统是做什么的,比如Oracle用的是什么
【问题讨论】:
标签:
database
performance
serialization
filesystems
【解决方案1】:
缺点:
- 在大多数文件系统上,即使是 1 字节的文件也会占用 4kb 的完整块。根据您要存储在数据库中的对象类型,这可能是一个大问题。
- 大多数文件系统的设计都不适用于包含数百万个文件的目录。
- 复杂的查询需要打开/读取/反序列化/关闭数百万个文件,因此会非常慢。
【解决方案2】:
这是一个有趣的概念,对您必须解决的紧迫问题提出一些想法。
- Windows 文件性能在几十万个文件后会受到影响,您需要更改某些方面(关闭 8.3 和上次更新时间戳)以使其在读取文件系统时不会导致延迟。
- 锁定 - 锁定机制将是一个有趣的挑战,您需要能够锁定内容以进行更新,但同时允许读取。
- ACID - 在对这个“数据库”执行操作时,您将如何执行 ACID 原则 - 它们中的每一个都是不平凡的问题。
【解决方案3】:
作为一种实践来了解更多关于数据库的知识,但对于一个应该做任何事情的真实世界项目,不。
数据库的底层有很多东西,除非你真的知道自己在做什么,在这种情况下你不会在这里问;),你很可能永远无法匹配现有的解决方案。
转而使用现有的对象数据库,并专注于您的应用程序/站点/...