问一个数据库的问题

hityct1 2008-11-30 09:49:20
很简单的问题。
我们在使用stl或vc提供的文件操作接口时(如ifstream,CFile),在更改文件中间的数据时,如果新的数据大于(或者)旧的数据,(保存时)会导致文件全部重写(到硬盘);如果等于旧的数据长度时,(保存时)只是修改的部分重写。
1)我的理解对不对?或者操作系统会用某种方法减少文件重写的可能性?
2)数据库文件通常很大,更改一个数据不可能导致全部重写文件。他是怎么避免的?有哪些策略。我理解是数据库的每个项的数据长度是固定的,或者有最大长度限制,这样会导致许多空间没有被利用。
...全文
175 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
康斯坦汀 2008-12-02
  • 打赏
  • 举报
回复
可能没完全理解楼主的意思,
数据库中数据的存储策略我理解有两种,一种是文件型(比如SQL Server7.0以后),一种是设备型(比如SQL Server6.5)
在设备型的数据库中,比如MSSQL6.5,数据库的大小是固定的,必须先建一个固定大小的“设备”,比如分配100M,然后系统就会
创建一个100M大小的文件。如果数据大于设备大小了,会拒绝存储,出错误的。MSSQL7以后改变为动态大小的文件型数据库了,随着
客户数据的增多自动调整大小。它的策略,我想是这样的,初始文件只包括库结构等基本信息,然后,客户有新数据进入增大文件。
存放数据,当数据被删除时,文件不自动缩小,而是通过给数据做标记的方式表示,除非客户主动缩小文件。有没有利用的空间
没什么关系,现在存储介质这么便宜。
shakaqrj 2008-12-02
  • 打赏
  • 举报
回复
删了之后可用分还会归还吗?
hityct1 2008-12-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dawugui 的回复:]
楼主把我 HU YOU 到这里来了?
[/Quote]
我想数据库编程的人更懂一些。
dawugui 2008-12-02
  • 打赏
  • 举报
回复
楼主把我 HU YOU 到这里来了?
水族杰纶 2008-12-02
  • 打赏
  • 举报
回复
幫頂~~
hityct1 2008-12-02
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 HEROWANG 的回复:]
我们在使用stl或vc提供的文件操作接口时(如ifstream,CFile),在更改文件中间的数据时,如果新的数据大于(或者)旧的数据,(保存时)会导致文件全部重写(到硬盘);如果等于旧的数据长度时,(保存时)只是修改的部分重写。


这个还真没听说过
[/Quote]

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


这个还真没听说过
hityct1 2008-11-30
  • 打赏
  • 举报
回复
不好意思,发重了。版主能不能把此贴删了,把分转到另一个帖子中?
hityct1 2008-11-30
  • 打赏
  • 举报
回复
up
一条晚起的虫 2008-11-30
  • 打赏
  • 举报
回复
数据库操作,是直接写磁盘的。
数据库的每个项的数据长度是固定的,或者有最大长度限制,这样会导致许多空间没有被利用。
//这个是没法避免的,为了优化数据库性能,牺牲点空间也是值得的。
ilovedrv 2008-11-30
  • 打赏
  • 举报
回复
只要帖子还没有回复,自己可以删除的

4,012

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧