我正在测试一个平面设计来代替 sql db,它使用带有文件的嵌套目录结构。首先,我考虑将数据存储在文件内部,但每个文件不超过 40 个符号,所以既然可以从名称中读取所有内容,为什么还要打开文件呢?但现在我无法找出与 sql 表相比存储空间的实际差异。我尝试了 du 和 find,它总是只显示目录大小和 0B 文件。
有没有办法获取文件的实际大小?或者至少手动计算,或者猜测?
不确定我的云使用什么文件系统,我猜是 ext4。操作系统是 ubuntu 14.04
编辑:
从我的回复中我了解到,唯一会占用磁盘空间的就是目录本身。最小为 4Kb。每个目录应该有大约 300 个空文件。如果一个 inode 至少消耗 256B,则目录应该会膨胀到 76.8Kb,但目录仍然只有 4Kb。
我还想弄清楚 SQL 表和这种平面设置之间的区别。当我执行
SELECT pg_size_pretty(pg_total_relation_size('table_name'));
在包含 300 条记录的表上(名称不是一个字符串,而是 5 个字段 - 6 个带 pk:1x ForeignKey、1xCharfield 最大 20 长度、2x FloatField、1x IntegerField),响应显示大小为 16Kb。这是 postgresql 9.3 和 django 1.8.6。将这些数据存储在 SQL 表中和空文件名称中真的会有 60Kb 的差异吗?或者目录根本不会因 inode 而变得臃肿,而我节省了 12Kb?
如果您想知道我为什么对几 kb 考虑这么多,那么设置稍后应该可以容纳多达 100K 个用户,其中包含 100x300 个空文件或数据库记录...所以这实际上是一个 GB 数据的问题... :-)
答案1
答案2
您可以cd
进入目录并运行ls -lha
,调用的.
是您的本地目录。请记住,您采用的这种方法将消耗大量的索引节点
编辑1:
您将看到文件大小为 0B,但您将能够看到本地文件夹的大小实际上随着您添加文件而增加,请检查目录.
,即您所在的文件夹。
Macbook-Pro:/tmp/test$ ls -lha total 0 drwxr-xr-x 6 DiegoVelez wheel 204B Oct 26 20:07 . drwxrwxrwt 43 root wheel 1.4K Oct 27 09:33 .. -rw-r--r-- 1 DiegoVelez wheel 0B Oct 26 20:06 file -rw-r--r-- 1 DiegoVelez wheel 0B Oct 26 20:06 file2 -rw-r--r-- 1 DiegoVelez wheel 0B Oct 26 20:06 file3 -rw-r--r-- 1 DiegoVelez wheel 0B Oct 26 20:07 file4