{"_id":"@alanchenchen/json-db","_rev":"1-dfdd18270f3339aa75843d4e58e1716b","name":"@alanchenchen/json-db","dist-tags":{"latest":"0.0.1"},"versions":{"0.0.1":{"name":"@alanchenchen/json-db","version":"0.0.1","description":"a small db controller saving with json file","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"start":"npm run serve","serve":"ts-node example.ts","build":"tsc"},"author":{"name":"Alan Chen"},"keywords":["json","database","db"],"license":"996.ICU","private":false,"repository":{"type":"git","url":"git+https://github.com/alanchenchen/jsonDb.git"},"homepage":"https://github.com/alanchenchen/jsonDb","bugs":{"url":"https://github.com/alanchenchen/jsonDb/issues","email":"739709491@qq.com"},"devDependencies":{"@types/node":"^12.12.12","ts-node":"^8.5.2","typescript":"^3.7.2"},"gitHead":"c9c51497541548142e4bb86ff5bf1eacb3f9c99a","_id":"@alanchenchen/json-db@0.0.1","_nodeVersion":"12.13.0","_npmVersion":"6.12.0","dist":{"integrity":"sha512-dZmAt246T8AU+eM73K32EOw5gZZIOTdHVzGH7Ob+c5ch8SVK7J86wlBnBAIz/keUvp7aVljD8kxX21u3yxFAzg==","shasum":"65ab639a570e26d313846072e2a5c9ae0d1542d0","tarball":"https://registry.npmjs.org/@alanchenchen/json-db/-/json-db-0.0.1.tgz","fileCount":20,"unpackedSize":31649,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd3kYrCRA9TVsSAnZWagAASOgP/30I0CSsUaH/giIIrO9H\n3kWSz91AfXRg/H+H1ASpnQoPdyJAm4rTrg+H/akqOWa/KaPwvHR4zpXdBxEU\n4GF91+qDLIQFDUlZbHY7WIjiNPh3bJfa+Dwp06oR4ixkNwg5heShP1b2Jj2z\nuvWCs9c02tpYkDn35RQQuV6d/vPJgJge7pfA8b6wzhGPRc/RUb48JCXzvjqK\nCHQYakrMoRAm+4s/XTQRXLj9czvRxnknuP2kddnBrNNEB6hUE2MsXUyywvj/\nPo8bN0eJuIPBLTH2UcMLrTiOXfxSCyxacuKx5RNIhdxFhy5dHYpgjRJ0fQJ1\nHrwy6hb60NJe2vnHo/BKe6k/Hj9WvpzVPV3O3nVxCO/bHbsin9cKJyIXy8M2\nn/RMLMtqmk2u2tu4H22X1gcd9yn6UAXYoK7gUpOf+bSWXPWdEXrOJhRyw3he\nK+7+AzhW3trFeRtchaAjKzK1EU4nVF9dDtQusb0XRtOpPAqnfzuw+FYU99p0\nkHnuMbtWlLxd9qqe4mZwQL5wh0CFgIjVzZblTHz3VEEsnV1xNuuH00xP7/XL\nfAOn8N8otFbZgeqLqZAf43GDo5PEt7nEvUxygCHUPWist7kV2fObvgF9ucar\nAG3EDyJF+JTM1Q0AeF1RWDOCfiR+yUmk8E1+gGNlxfC4ppGNnX+PUj8g3OS1\nAtex\r\n=j1MP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGxCxzxvW4AreU6nEJqRmZwlmhkoZ88tHMdLRvW31UT3AiEA5Daf8fNYG/ByIXn5MP4OB5mTlaKtFHetZoTIeG9gJtw="}]},"maintainers":[{"name":"alanchenchen","email":"739709491@qq.com"}],"_npmUser":{"name":"alanchenchen","email":"739709491@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/json-db_0.0.1_1574848043431_0.5115298848546521"},"_hasShrinkwrap":false}},"time":{"created":"2019-11-27T09:47:23.206Z","0.0.1":"2019-11-27T09:47:23.625Z","modified":"2022-04-04T12:32:58.583Z"},"maintainers":[{"name":"alanchenchen","email":"739709491@qq.com"}],"description":"a small db controller saving with json file","homepage":"https://github.com/alanchenchen/jsonDb","keywords":["json","database","db"],"repository":{"type":"git","url":"git+https://github.com/alanchenchen/jsonDb.git"},"author":{"name":"Alan Chen"},"bugs":{"url":"https://github.com/alanchenchen/jsonDb/issues","email":"739709491@qq.com"},"license":"996.ICU","readme":"# jsonDb\n\n\n![](https://img.shields.io/npm/v/@alanchenchen/jsonDb.svg)\n![](https://img.shields.io/npm/dt/@alanchenchen/jsonDb.svg)\n[![LICENSE](https://img.shields.io/badge/license-Anti%20996-blue.svg)](https://github.com/996icu/996.ICU/blob/master/LICENSE)\n\na small db controller saving with json file\n> Author：Alan Chen\n\n> Version: 0.0.1\n\n> Date: 2019/11/26\n\n## purpose\n\n1. lowdb适用的场景，jsonDb都适用，我个人认为，这种以本地文件存储数据的插件，比较适合electron本地应用和非常轻量的server。\n2. lowdb本身没对数据读写做什么处理，它更像是一个通用的api插件，支持adapter来实现读写数据的接口。虽然兼容了browser端，但是我个人认为localstorage本身就是阻塞操作，还不如localforage集成的indexdb和websql来的高效。\n3. lowdb自带的adapter对node端处理的太过于[暴力](https://github.com/typicode/lowdb/blob/master/src/adapters/FileAsync.js)，导致在读写体积稍微大一点的json文件（[作者说是200m左右](https://github.com/typicode/lowdb#usage)）时，就会导致卡顿，甚至内存崩溃。\n4. jsonDb在对读取文件时，做了分片读取，通过jsonDb生成的`.jsonx`文件都会附带一个索引映射`.map`文件。开发者可以指定读取部分字节大小的数据到内存中，而且索引文件会同步更新，这样就避免了内存崩溃和io读取耗时太长。\n\n> 其实jsonDb也可以写成lowdb的一个adapter，但是在下不太喜欢依赖太多，加上一些api可能也不好实现，因此写了一个单独的插件。\n\n## disadvantage\n\n1. 虽然jsonDb在一定程度上解决了读取大文件的耗时和内存崩溃问题，但是随着`.jsonx`文件越来越大，`.map`文件也势必越来越大，尤其当`.jsonx`文件的key超级庞大，这样就gg了。。。\n2. 原本最理想的情况是，读写都实现分片，但是在写入文件时遇到[坑](./doc/mistakes.md)了。。。\n3. lowdb由于集成了lodash，所以在处理数据上会非常好用，jsonDb没有，但是提供了一个query方法自定义查询，如果你觉得还是不够的话。自己用lodash再次处理吧。\n4. 目前不支持并发操作，后期可能会通过event emitter保证下次读取会等待当前写入完成之后再触发。\n\n## usage\n1. `git clone https://github.com/alanchenchen/jsonDb.git`\n2. `cd jsonDb`然后`yarn`安装好依赖\n3. 接着使用下面的脚本命令即可，目前入口文件是example.ts\n\n## api\n[传送门](./doc/api.md)\n\n## scripts\n\n1. `npm start`等同于`npm run serve`,通过ts-node启动example.ts.\n2. `npm build`编译ts文件到dist目录.\n\n## license\n* Anti 996(996.ICU)","readmeFilename":"README.md"}