@pozs ... 这与您指定的内容不重复。那是我看的第一个地方。我不太关心text和varchar之间的区别。我在询问中型服务器硬盘中使用的物理空间。
我知道硬盘驱动器被拆分为字节块,也就是块,如果使用的块少于块的总量,则剩余空间是空闲的未使用空间。我很好奇的是文本选项本身使用了一定数量的存储空间。可以减少使用的空间而不仅仅是限制输入的数量。我可以说文字限制=> 1,它仍然可以使用成千上万的字节......这就是我所要求的。
这是硬盘块的照片。这就是我想象的ActiveRecord文本类型空间的使用方式
这里是块上的维基(数据存储)http://en.wikipedia.org/wiki/Block_(data_storage)正如您所见,他们说"块存储通常由文件系统或数据库管理系统(DBMS)抽象" 他们不说的是它是如何抽象的。
根据Igor的博客,他说&#34;令我惊讶的是,他们确定我们的Postgres数据库的平均I / O大小远高于8KB块大小,高达1MB < /strong>." http://igorsf.wordpress.com/2010/11/01/things-to-check-when-configuring-new-postgres-storage-for-high-performance-and-availability/虽然这有助于了解它并没有告诉我ActiveRecord和PostgreSQL在处理块时的默认行为。
根据concernedoftunbridgewells&#34;数据库将在某个给定块大小的表或索引中分配空间。在Postgres的情况下,这是8K&#34;。 https://dba.stackexchange.com/questions/15510/understanding-block-sizes/15514#15514?newreg=fc10593601be479b8ed697d1bbd108ed因此,如果将8K用作块,那么我将文本类型限制设置为多少或多低以匹配并适合一个8K块,因为它可能只使用一个块。
我知道可以更改PostgreSQL块大小设置。所以我希望明确&#34; ActiveRecord PostgreSQL块大小处理当前是如何工作的&#34;。我会接受一个很好的答案。
答案 0 :(得分:1)
页面包含多个项目(假设显然有空间)。如果你的行少于8k,那么其他行将与它一起存储在同一页面上(我稍微简化了一下 - 无论如何,postgres分别存储大列)。限制列的最大长度不会与此相互作用。
我对character types的详细信息是,126个字符以下的字符串会产生3个字节的开销,但这种情况会逐行发生,与最大长度无关。
postgresql文档详细介绍了on disk format以及postgresql如何处理large columns。
答案 1 :(得分:0)