| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- <?php
- /****************************************************
- * NKeditor PHP
- * 本PHP程序是演示程序,建议不要直接在实际项目中使用。
- * 如果您确定直接使用本程序,使用之前请仔细确认相关安全设置。
- * **************************************************
- * 简易数据库, 单表 100w 条数据,查询一页数据在 0.015 秒左右
- * 缺陷,无法排序,如果要排序的话,那么不适合使用 SimpleDB, 请使用 mysql 或者 mongdb
- * User: yangjian
- * Date: 17-10-14
- * Time: 下午5:15
- */
- class SimpleDB {
- /**
- * 文件资源
- * @var null|resource
- */
- private $handler = null;
- /**
- * 初始化,打开文件
- * SimpleDB constructor.
- * @param $dbname
- */
- public function __construct($dbname)
- {
- $dataDir = __DIR__."/data/";
- if (!file_exists($dataDir)) {
- mkdir($dataDir);
- }
- $this->handler = fopen($dataDir.$dbname.'.db', 'a+');
- }
- /**
- * 写入一行数据
- * @return bool
- */
- public function putLine($data) {
- if ($this->handler != null) {
- fwrite($this->handler, $this->seralize($data));
- }
- return false;
- }
- /**
- * 分页获取数据列表
- * @param $key
- * @return array|null
- */
- public function getDataList($page, $pagesize) {
- if($page <= 0) {
- $page = 1;
- }
- $offset = ($page - 1) * $pagesize;
- //循环读取数据
- $datas = [];
- $counter = 0;
- while (!feof($this->handler)) {
- if ($counter < $offset) {
- fgets($this->handler); //移动指针到下一行
- $counter++;
- continue;
- }
- if (count($datas) == $pagesize) {
- break;
- }
- $line = fgets($this->handler);
- if (!empty($line)) {
- $datas[] = $this->unseralize($line);
- }
- }
- return $datas;
- }
- /**
- * 序列化数据
- * @param $data
- * @return string
- */
- private function seralize($data) {
- $break = "\n"; //换行符
- if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
- $break = "\r\n";
- }
- return json_encode($data, JSON_UNESCAPED_UNICODE).$break;
- }
- /**
- * 反序列化
- * @param $data
- * @return mixed
- */
- private function unseralize($data) {
- return json_decode($data, true);
- }
- /**
- * 关闭文件
- */
- public function __destruct()
- {
- if ($this->handler != null) {
- fclose($this->handler);
- }
- }
- }
|