问一个数据库的问题

时间:2022-12-11 18:03:36
    很简单的问题。
    我们在使用stl或vc提供的文件操作接口时(如ifstream,CFile),在更改文件中间的数据时,如果新的数据大于(或者)旧的数据,(保存时)会导致文件全部重写(到硬盘);如果等于旧的数据长度时,(保存时)只是修改的部分重写。
   1)我的理解对不对?或者操作系统会用某种方法减少文件重写的可能性?
   2)数据库文件通常很大,更改一个数据不可能导致全部重写文件。他是怎么避免的?有哪些策略。我理解是数据库的每个项的数据长度是固定的,或者有最大长度限制,这样会导致许多空间没有被利用。

11 个解决方案

#1


不好意思,发重了。版主能不能把此贴删了,把分转到另一个帖子中?

#2


只要帖子还没有回复,自己可以删除的

#3


数据库操作,是直接写磁盘的。
数据库的每个项的数据长度是固定的,或者有最大长度限制,这样会导致许多空间没有被利用。 
//这个是没法避免的,为了优化数据库性能,牺牲点空间也是值得的。

#4


up

#5


幫頂~~

#6


楼主把我 HU YOU 到这里来了?

#7


引用 6 楼 dawugui 的回复:
楼主把我 HU YOU 到这里来了?

我想数据库编程的人更懂一些。

#8


删了之后可用分还会归还吗?

#9


可能没完全理解楼主的意思,
数据库中数据的存储策略我理解有两种,一种是文件型(比如SQL Server7.0以后),一种是设备型(比如SQL Server6.5)
在设备型的数据库中,比如MSSQL6.5,数据库的大小是固定的,必须先建一个固定大小的“设备”,比如分配100M,然后系统就会
创建一个100M大小的文件。如果数据大于设备大小了,会拒绝存储,出错误的。MSSQL7以后改变为动态大小的文件型数据库了,随着
客户数据的增多自动调整大小。它的策略,我想是这样的,初始文件只包括库结构等基本信息,然后,客户有新数据进入增大文件。
存放数据,当数据被删除时,文件不自动缩小,而是通过给数据做标记的方式表示,除非客户主动缩小文件。有没有利用的空间
没什么关系,现在存储介质这么便宜。

#10


我们在使用stl或vc提供的文件操作接口时(如ifstream,CFile),在更改文件中间的数据时,如果新的数据大于(或者)旧的数据,(保存时)会导致文件全部重写(到硬盘);如果等于旧的数据长度时,(保存时)只是修改的部分重写。


这个还真没听说过

#11


引用 10 楼 HEROWANG 的回复:
我们在使用stl或vc提供的文件操作接口时(如ifstream,CFile),在更改文件中间的数据时,如果新的数据大于(或者)旧的数据,(保存时)会导致文件全部重写(到硬盘);如果等于旧的数据长度时,(保存时)只是修改的部分重写。 


这个还真没听说过


解释解释吧。

#1


不好意思,发重了。版主能不能把此贴删了,把分转到另一个帖子中?

#2


只要帖子还没有回复,自己可以删除的

#3


数据库操作,是直接写磁盘的。
数据库的每个项的数据长度是固定的,或者有最大长度限制,这样会导致许多空间没有被利用。 
//这个是没法避免的,为了优化数据库性能,牺牲点空间也是值得的。

#4


up

#5


幫頂~~

#6


楼主把我 HU YOU 到这里来了?

#7


引用 6 楼 dawugui 的回复:
楼主把我 HU YOU 到这里来了?

我想数据库编程的人更懂一些。

#8


删了之后可用分还会归还吗?

#9


可能没完全理解楼主的意思,
数据库中数据的存储策略我理解有两种,一种是文件型(比如SQL Server7.0以后),一种是设备型(比如SQL Server6.5)
在设备型的数据库中,比如MSSQL6.5,数据库的大小是固定的,必须先建一个固定大小的“设备”,比如分配100M,然后系统就会
创建一个100M大小的文件。如果数据大于设备大小了,会拒绝存储,出错误的。MSSQL7以后改变为动态大小的文件型数据库了,随着
客户数据的增多自动调整大小。它的策略,我想是这样的,初始文件只包括库结构等基本信息,然后,客户有新数据进入增大文件。
存放数据,当数据被删除时,文件不自动缩小,而是通过给数据做标记的方式表示,除非客户主动缩小文件。有没有利用的空间
没什么关系,现在存储介质这么便宜。

#10


我们在使用stl或vc提供的文件操作接口时(如ifstream,CFile),在更改文件中间的数据时,如果新的数据大于(或者)旧的数据,(保存时)会导致文件全部重写(到硬盘);如果等于旧的数据长度时,(保存时)只是修改的部分重写。


这个还真没听说过

#11


引用 10 楼 HEROWANG 的回复:
我们在使用stl或vc提供的文件操作接口时(如ifstream,CFile),在更改文件中间的数据时,如果新的数据大于(或者)旧的数据,(保存时)会导致文件全部重写(到硬盘);如果等于旧的数据长度时,(保存时)只是修改的部分重写。 


这个还真没听说过


解释解释吧。