当前位置:   article > 正文

一种简单的数据存储设计_数据存储设计怎么写

数据存储设计怎么写

一.设计目的

在xx项目中,需要载入多张表并对表做关联,然后后面查询使用。但是由于每次系统启动时候都要加载多张表本分析表的关系,所以在每次系统启动的时候,都要卡一下,并且有时候表很大,而分配给系统的内存又有限。为了解决上诉等问题,设计了一种方法,就是索引加数据库方法,下面是索引的基本设计(数据库不是我做的,数据库主要使用了文件映射技术来解决内存压力)。

注:本文数据库指数据的集合,只包含数据。

二.构成

(1)FileHandler类。该类对索引文件做控制。类由自己创建,在第一次初始化数据库之后,执行一次写索引,将索引内容写出到文件。以后每次启动都通过读索引来加载。

(2)Info类。这是一个简化,实际Info类做了多层嵌套(数据的索引层次太多了)。Info类保存了本级的id值和内部数据(可能是个map,或者vector之类)。

(3)IndexBuilder类。这个类负责在初始化的时候,反复从数据库取得索引信息,并将索引信息记录进map。

(4)Index类。这个类读取所以呢的文件,并提供查询方法。

三.实现

  1. typedef vector<size_t> Container;
  2. class FileHandler{
  3. private:
  4. FileHandler();
  5. public:
  6. auto_ptr<FileHandler> createFileHandler();
  7. void writeOneKey(const char*);
  8. void writeOneVal(const char*);
  9. void writeValList(const Container&);
  10. char readOneKey();
  11. char readOneVal();
  12. void readValList(size_t, Container&);
  13. private:
  14. FILE* key;
  15. FILE* val;
  16. };
  17. class Info{
  18. public:
  19. Info(size_t);
  20. private:
  21. NONE_COPY_AND_ASSIGN(Info);
  22. public:
  23. void addIndexInfo(const IndexInfo&);
  24. void getIndexInfo(IndexInfo&);
  25. void saveToFile();
  26. void loadFromFile();
  27. size_t getId();
  28. private:
  29. size_t id;
  30. Container contain;
  31. };
  32. class IndexBuilder{
  33. public:
  34. IndexBuilder(const PARAM&);
  35. private:
  36. NONE_COPY_AND_ASSIGN(IndexBuilder);
  37. public:
  38. void addIndex(const Index&);
  39. void saveToFile();
  40. private:
  41. map<size_t, Info> infos;
  42. FileHandler* files;
  43. };
  44. class Index{
  45. public:
  46. Index(const string&);
  47. private:
  48. NONE_COPY_AND_ASSIGN(Index);
  49. public:
  50. void getIndex(size_t, Index&);
  51. void loadFromFile();
  52. private:
  53. map<size_t, Info> infos;
  54. FileHandler* files;
  55. }


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/953337
推荐阅读
相关标签
  

闽ICP备14008679号