文件數據結構描述如下: 類似聊天紀錄的讀寫一條紀錄的格式:senderid  rcverid  sendtime strcontent
1         2        ...      ...
1         3        ...      ...
1         3        ...      ...
3         1        ...      ...
2         1        ...      ...即該文件只保存自己發出的信息以別人發給自己的信息 寫入的時候直接追加到文件末尾 現在的問題是 
1. 如何寫入效率比較高,因為寫入頻繁
2. 如何讀出 檢索
讀出暫定為:
一次性將所有內容讀出到內存 然後按照 senderid == id / rcverid == id遍歷
還需要對某個id的所有內容按照sendtime排序 
請問 有身麼好的方法 使得效率較高,主要是不太清楚 文件內容的遍歷,排序謝謝.

解决方案 »

  1.   

    可以用access桌面数据库,就不用自己写这些东东了
      

  2.   

    对你的需求,使用数据库是最好的选择。
    若使用文件,可以考虑为每一个 rcverid 生成一个单独的文件,或以 rcverid 为文件名,以次简化消息分检。
      

  3.   

    TO:  qwedcxza(自娱自乐)
         有考慮過您說的這種處理方式,但是由於前面需求的失誤,使得這樣做對系統有較大的影響,可能暫時不考慮.
         對,我考慮下access     謝謝樓上兩位哥們.
      

  4.   

    另:
    TO:  qwedcxza(自娱自乐)
         文件名應該是以senderid命名,放在自己的id(selfid)的文件夾中
         即 自己發出給對方的以及對方發給自己的都裝在以對方的id命名的文件中
     senderid/rcverid 是相對的而已.  
         
         最開始我們就是在設計過程中沒有封裝好 導致有些問題.
      

  5.   

    另:
    to:  bcpl(Relax) & qwedcxza(自娱自乐)
       如果採用access桌面數據庫(何為桌面數據庫)
       我該注意那些,連接方式,讀出,寫入,加密等
       連接採取 odbc, ado,等...
       我對數據庫編程不熟悉,還望多指教
      

  6.   

    桌面数据库是相对于大型数据库而言,一般用于单机存取数据。
    用ado直接连access,没必要用odbc,www.codeproject.com有一个封装好的ado类,很容易用。
    数据库编程至少要了解一些基本的sql操作(如select)
      

  7.   

    up,使用access桌面数据库,还是用ado比较好
      

  8.   

    TO
     bcpl(我是宇宙中的一粒沙子) &&  bcpl(Relax)
     名字咂的一樣喔.
     
     sql語言我還行,起碼的都懂
     我不能用別人的類 因為我現在是寫商業代碼 會有版權糾紛的.
     ado 我有了解一些, 我再看看
      
     再次感謝樓上的哥們.
      

  9.   

    那好.再問一下:
    如果 我一定要用文件的話 how to.非常感謝.
      

  10.   

    文件的话无非是定义个数据结构,遍历排序等可以用stl那一套东东,应该也不难,就是要处理很多细节
      

  11.   

    INI自己定义的结构自己认,最好用ACCESS
      

  12.   

    恩, 就使用stl
    我再看看.
      

  13.   

    我觉得应该组织成B+树或者B-树的形式,B树是一种平衡的多叉树,在经过多次插入删除操作后,依然能够保持平衡,就是说不会产生个别树枝非常长,而有些树枝又过短的问题,能很好地保持均衡的查找效率。NTFS使用的是B+树。
      

  14.   

    还有,按照你老兄的要求,明显是属于外排序范畴,这种情况下,使用链式结构是非常低效的,假设有n个记录,执行查找时最坏要比较n次,而当记录数目很大的时候,不可能要依次遍历一次。所以应该组织成查找树的结构,对于含有n个节点的AVL树,其查找操作在O(nlog2 n)内可以完成。
    如果关键字段唯一,可以不用B树而使用AVL树,效果不错,只要在第一次读入内存的时候把整个树建立起来就可以了。
      

  15.   

    使用链式结构的话,你很快就可以尝到苦头了,呵呵。实在太低效。数组可以随机存储,可惜不能动态修改;链表可以,但是又不能随机存储。如果你怕B树麻烦的话,为什么不试试hash表呢?Hash表又称散列,和B树一样都是构成文件系统的重要数据结构。
      

  16.   

    定义一个Hash函数,处理好冲突就可以了。开式寻址或者拉链法都可以,随便找本书上都有介绍,Hash表非常简单的。
      

  17.   

    我使用stl好了
    hash表跟b+树都有一点了解 不过没用过。
      

  18.   

    STL里面应该有B树和hash表的实现。
      

  19.   

    散列其实就是一种索引结构,不过它的索引是用一个函数生成的。这个函数写出来就是:
    记录n所处的单元地址=f(记录n的关键字)。
    只要定义好这个散列函数,进行一次运算就可以找到要找的记录。但是函数往往无法保证不含冲突,所以会发现有2个记录被映射到同一地址上,这样叫做冲突,只需要再定义一条冲突规则就可以了,譬如产生冲突的时候,如果当前单元已经存放记录了,那么产生冲突的记录就往后移动一个位置,等等。
      

  20.   

    解决了
    没用到你说的树
    使用STL的
    其实思路也挺简单
    不过是很多不熟悉
    有空会考虑你的方法谢谢!