一个基于文件型noSql数据库的实现想法

刚刚在技术群里跟网友们聊天,关于文件型数据库则是在这个过程中产生的。其实noSql大家研究的都比较多,而最常用的就是mongoDb。文件型数据库顾名思义就是以文档文件的格式存储数据。

一个基于文件型noSql数据库的实现想法

在2016年的时候,波波和另外一个朋友参与了工业网博会平台的开发,其中有一个业务环节是用户可以在平台中发贴(类似微信朋友圈,支持图文、视频、文字等几种不同形式),除此之外直播中用户也会发文字交流,为了避免用户在平台上发布不当言论,需要开发一个敏感词过滤器。其中敏感词的管理就用到了txt文件作为数据库使用。

之所以采用TXT文件来作为敏感词管理的数据库,主要基于以下几个原因:

1、Mysql等关系型数据库在任何一个高并发的互联网平台中都容易成为系统的性能瓶颈(当然有解决方案,但这里不做讨论)。

2、敏感词过滤的词汇,我们不可能通过人工增加许多。唯一的办法就是网络下载其他网站的敏感词库,其他网站的词库以TXT文档居多。

3、敏感词汇的后台管理一般增加词汇的需求多于删除和修改,所以后台管理对文件append操作是最频繁的,即使是这样一个平台的敏感词库不会每天都存在大量增删改查,基本属于固定数据。

4、敏感词的管理业务与其他业务无任何关联,不需要关联查询。

基于以上四种原因,波波专门开发了基于txt文件的增删改查,让txt文件充当了一次数据库的角色。那么除了txt文件之外还有那些文件可以充当数据库的角色呢?

1、json文件。json文件是充当数据库角色最优的选择,它的优势不仅仅在于解析方便,而且适合所有的开发语言。文件以字符类型存储,占用空间较小。

2、excel文件。excel文件可以充当数据库角色是因为其数据有行列之分,可以按行、按列进行搜索。

3、txt文件。txt文件虽然可充当数据库,但其结构过于简单,不适合结构复杂的数据,简单的数据基本都可以用。

除了以上三个之外,当然还有其他的文件也可以充当数据库,比如xml,php,js等等。

除了这些文件可以充当数据库之外,波波另外的想法是可以把这个东西写成一个类库。这个类库要实现的功能主要有以下几个:

1、配置文件:配置文件主要配置Database文件存放的目录路径,文件的格式(如txt,json等),字段的分隔符、删除文件标记等等。

2、类库采用composer方式安装(这里以PHP语言为例,C语言和Python可开发pip类库等)采用autoload方式加载。

3、目录结构示例:

  1. ─数据库根目录
  2.     │  表名A(目录)
  3.     │
  4.     ├─表名B
  5.     │  ├─struct.json  (存储表结构)
  6.     │  ├─1.json
  7.     │  ├─2.json
  8.     │  ├─3.json
  9.     │  ├─4.json
  10.     │  └─5.json
  11.     │
  12.     └─表名C
  13.         ├─1.json
  14.         ├─2.json

4、要实现的方法:

①通过配置文件实例化数据库的连接,如Db::table('表名B'),类似TP5的Db类库。这一步读取完表结构结束。

②数据简单查询(如单篇文章内容查询),写法:Db::table('表名B')->where(1)->select()。

简单数据查询主要实现完整内容查询,和指定字段内容查询field(),以及单一字段内容查询value()。

③集合数据查询及分页。比如我们要查询第3篇文章到第100篇文章的数据,每页显示10篇,要实现查询方法。Db::table('表名B')->where('3','100')->page(index,10)->select()

当然了过于复杂的查询肯定也不适合,毕竟noSql这些东西有很多技术成熟的。

④数据修改就不说了,一般单独文件读取之后,修改其值就可以了。

⑤删除数据。删除数据分为软删除和删除,软删除时给对应文件重命名就可以了,比如1.json在删除时候可以重命名为1.del,恢复的时候可以直接恢复。而删除数据则无法恢复。

相关的实现很简单,具体代码就不写了。有时间的话再整理,毕竟作用不是很大。

波波
你想把广告放到这里吗?

发表评论

您必须 登录 才能发表留言!