diff --git a/benches/DB1KiB.ts b/benches/DB1KiB.ts index 8afb4cbc..98f916b4 100644 --- a/benches/DB1KiB.ts +++ b/benches/DB1KiB.ts @@ -11,11 +11,10 @@ const logger = new Logger('DB1KiB Bench', LogLevel.WARN, [new StreamHandler()]); async function main() { const dataDir = await fs.promises.mkdtemp( - path.join(os.tmpdir(), 'encryptedfs-benches-'), + path.join(os.tmpdir(), 'db-benches-'), ); const dbPath = `${dataDir}/db`; const db = await DB.createDB({ dbPath, logger }); - await db.start(); const data0 = crypto.randomBytes(0); const data1KiB = crypto.randomBytes(1024); const summary = await b.suite( diff --git a/benches/DB1MiB.ts b/benches/DB1MiB.ts index 8fba9c4f..580d5979 100644 --- a/benches/DB1MiB.ts +++ b/benches/DB1MiB.ts @@ -11,11 +11,10 @@ const logger = new Logger('DB1MiB Bench', LogLevel.WARN, [new StreamHandler()]); async function main() { const dataDir = await fs.promises.mkdtemp( - path.join(os.tmpdir(), 'encryptedfs-benches-'), + path.join(os.tmpdir(), 'db-benches-'), ); const dbPath = `${dataDir}/db`; const db = await DB.createDB({ dbPath, logger }); - await db.start(); const data0 = crypto.randomBytes(0); const data1MiB = crypto.randomBytes(1024 * 1024); const summary = await b.suite( diff --git a/benches/DBLevel.ts b/benches/DBLevel.ts new file mode 100644 index 00000000..2d2ac000 --- /dev/null +++ b/benches/DBLevel.ts @@ -0,0 +1,86 @@ +import os from 'os'; +import path from 'path'; +import fs from 'fs'; +import b from 'benny'; +import Logger, { LogLevel, StreamHandler } from '@matrixai/logger'; +import DB from '@/DB'; +import packageJson from '../package.json'; + +const logger = new Logger('DBLevel Bench', LogLevel.WARN, [ + new StreamHandler(), +]); + +async function main() { + const dataDir = await fs.promises.mkdtemp( + path.join(os.tmpdir(), 'encryptedfs-benches-'), + ); + const dbPath = `${dataDir}/db`; + const db = await DB.createDB({ dbPath, logger }); + const summary = await b.suite( + 'DBLevel', + b.add('create 1 sublevels', async () => { + let level; + for (let i = 0; i < 1; i++) { + level = await db.level(`level${i}`, level); + } + }), + b.add('create 2 sublevels', async () => { + let level; + for (let i = 0; i < 2; i++) { + level = await db.level(`level${i}`, level); + } + }), + b.add('create 3 sublevels', async () => { + let level; + for (let i = 0; i < 3; i++) { + level = await db.level(`level${i}`, level); + } + }), + b.add('create 4 sublevels', async () => { + let level; + for (let i = 0; i < 4; i++) { + level = await db.level(`level${i}`, level); + } + }), + b.add('get via sublevel', async () => { + await db.put(['level0'], 'hello', 'world'); + return async () => { + const level = await db.level('level0'); + await level.get('hello'); + }; + }), + b.add('get via key path concatenation', async () => { + await db.put(['level0'], 'hello', 'world'); + return async () => { + await db.get(['level0'], 'hello'); + }; + }), + b.cycle(), + b.complete(), + b.save({ + file: 'DBLevel', + folder: 'benches/results', + version: packageJson.version, + details: true, + }), + b.save({ + file: 'DBLevel', + folder: 'benches/results', + format: 'chart.html', + }), + ); + await db.stop(); + await fs.promises.rm(dataDir, { + force: true, + recursive: true, + }); + return summary; +} + +if (require.main === module) { + (async () => { + await main(); + })(); +} + +export default main; diff --git a/benches/index.ts b/benches/index.ts index 1232e30a..81765cc8 100644 --- a/benches/index.ts +++ b/benches/index.ts @@ -4,10 +4,12 @@ import fs from 'fs'; import si from 'systeminformation'; import DB1KiBBench from './DB1KiB'; import DB1MiBBench from './DB1MiB'; +import DBLevelBench from './DBLevel'; async function main(): Promise { await DB1KiBBench(); await DB1MiBBench(); + await DBLevelBench(); const systemData = await si.get({ cpu: '*', osInfo: 'platform, distro, release, kernel, arch', diff --git a/benches/results/DB1KiB.chart.html b/benches/results/DB1KiB.chart.html index 215b09f2..f8e684c0 100644 --- a/benches/results/DB1KiB.chart.html +++ b/benches/results/DB1KiB.chart.html @@ -16,7 +16,7 @@
- +
+ + DBLevel + + +
+ +
+ + + diff --git a/benches/results/DBLevel.json b/benches/results/DBLevel.json new file mode 100644 index 00000000..2fe993e0 --- /dev/null +++ b/benches/results/DBLevel.json @@ -0,0 +1,671 @@ +{ + "name": "DBLevel", + "date": "2022-03-23T04:38:52.784Z", + "version": "1.2.1", + "results": [ + { + "name": "create 1 sublevels", + "ops": 82387, + "margin": 6.03, + "options": { + "delay": 0.005, + "initCount": 1, + "minTime": 0.05, + "maxTime": 5, + "minSamples": 5 + }, + "samples": 81, + "promise": true, + "details": { + "min": 0.00001064311372299873, + "max": 0.000041776577338129494, + "mean": 0.000012137807129761317, + "median": 0.000011637322719060524, + "standardDeviation": 0.0000033606785478215373, + "marginOfError": 7.318811059700236e-7, + "relativeMarginOfError": 6.029763845690763, + "standardErrorOfMean": 3.7340872753572636e-7, + "sampleVariance": 1.1294160301787878e-11, + "sampleResults": [ + 0.00001064311372299873, + 0.000011297824034334765, + 0.000011327521346284166, + 0.00001133068759882539, + 0.00001133104721030043, + 0.00001133713485430314, + 0.000011338196521346285, + 0.000011340846622995256, + 0.000011361735486785633, + 0.000011367038026256226, + 0.000011379261576688502, + 0.000011380958672086722, + 0.000011387994804608086, + 0.00001139909280217293, + 0.000011399285616594483, + 0.000011409334314169307, + 0.00001141888055618874, + 0.000011424020103907838, + 0.000011437908103214124, + 0.000011453198554325729, + 0.000011463787686736078, + 0.00001146379674060661, + 0.00001146803983703033, + 0.000011468169081032142, + 0.000011490248701152022, + 0.00001149678134902671, + 0.000011502734583239214, + 0.000011503194658216388, + 0.000011506267223853625, + 0.00001152973675871435, + 0.000011530749943528349, + 0.000011536361562782294, + 0.000011542708380393043, + 0.00001154328303591597, + 0.0000115484908515925, + 0.000011553532799999999, + 0.000011576920914285714, + 0.000011584038252602987, + 0.000011593319403659363, + 0.000011631383085714286, + 0.000011637322719060524, + 0.000011668279647616896, + 0.000011671581432121076, + 0.000011687143378162753, + 0.000011698000683838613, + 0.000011719933589338152, + 0.000011765751298847978, + 0.000011800936228571428, + 0.000011806318048339733, + 0.00001180841834199232, + 0.000011811326632030721, + 0.000011835336345154732, + 0.000011840249886826619, + 0.000011851418057142856, + 0.000011883857533622065, + 0.000011899701485714286, + 0.000011947828552066862, + 0.000011958202846171222, + 0.000011979641969731196, + 0.000012013162057142857, + 0.000012022295085714286, + 0.000012126464685714285, + 0.00001220778299521313, + 0.000012226834055162981, + 0.000012242855026213814, + 0.000012261869842717118, + 0.000012265105994985182, + 0.00001231652769546387, + 0.000012334332571428571, + 0.0000123822224, + 0.000012422931616138592, + 0.000012425284342857142, + 0.000012427250284932756, + 0.000012535637485714286, + 0.000012538495314285714, + 0.00001256163984499658, + 0.000012582970594939594, + 0.000012595832687485753, + 0.000012622171222046533, + 0.000012704260314565762, + 0.000041776577338129494 + ] + }, + "completed": true, + "percentSlower": 0 + }, + { + "name": "create 2 sublevels", + "ops": 45316, + "margin": 0.69, + "options": { + "delay": 0.005, + "initCount": 1, + "minTime": 0.05, + "maxTime": 5, + "minSamples": 5 + }, + "samples": 84, + "promise": true, + "details": { + "min": 0.00002136060756802721, + "max": 0.000025227300255536628, + "mean": 0.000022067232485667413, + "median": 0.000021775282417811604, + "standardDeviation": 7.088609628025949e-7, + "marginOfError": 1.515924208979678e-7, + "relativeMarginOfError": 0.6869571025565917, + "standardErrorOfMean": 7.734307188671827e-8, + "sampleVariance": 5.024838645854219e-13, + "sampleResults": [ + 0.00002136060756802721, + 0.000021383335744680852, + 0.000021386934042553194, + 0.000021406294042553193, + 0.000021415055792163543, + 0.000021451814468085106, + 0.00002146061404255319, + 0.00002146637478705281, + 0.000021485628194207836, + 0.00002152941229578676, + 0.000021538770638297872, + 0.000021539457908163266, + 0.00002155480144557823, + 0.000021556729148753225, + 0.000021560475724020442, + 0.000021567255536626915, + 0.00002156929234042553, + 0.000021578731728288908, + 0.000021590899914821124, + 0.00002160020170212766, + 0.0000216460625, + 0.000021654342553191487, + 0.000021671277021276594, + 0.000021675776870163372, + 0.000021678332179930794, + 0.000021679300515907135, + 0.000021700766183986372, + 0.000021701235319148934, + 0.000021703674307958478, + 0.000021707218858131485, + 0.000021707596020761246, + 0.000021745113069647462, + 0.00002175181659574468, + 0.000021752265570934257, + 0.00002175611375432526, + 0.00002175622188581315, + 0.000021759930212765956, + 0.000021764265531914894, + 0.000021765382978723403, + 0.000021766098639455783, + 0.0000217724514893617, + 0.000021774140154772142, + 0.000021776424680851066, + 0.000021825440311418686, + 0.000021838595826235094, + 0.000021851576235093697, + 0.000021855140584694758, + 0.000021874831345826233, + 0.00002189113370593293, + 0.000021894574806534822, + 0.0000218979865916955, + 0.000021916004255319148, + 0.000021925863714531385, + 0.00002194397402044293, + 0.000021962612024221454, + 0.000022005270017035776, + 0.000022142241908006816, + 0.00002220054541522491, + 0.00002221483688245315, + 0.000022251725298126067, + 0.000022254434412265756, + 0.0000223478125, + 0.00002241268400687876, + 0.000022466030954428204, + 0.000022478845826235096, + 0.000022545909602076123, + 0.000022547551903114186, + 0.00002258607223183391, + 0.00002259548495270851, + 0.000022637255110732537, + 0.00002264890787197232, + 0.00002267336347975883, + 0.000022697320934256055, + 0.000022704968483816013, + 0.000022746815744680852, + 0.000022781240221088438, + 0.000022805427172061327, + 0.000022822220588235293, + 0.000022878916241496597, + 0.000023085505930656934, + 0.000023251907155025555, + 0.000024459412629757786, + 0.000024831293685121107, + 0.000025227300255536628 + ] + }, + "completed": true, + "percentSlower": 45 + }, + { + "name": "create 3 sublevels", + "ops": 30535, + "margin": 0.67, + "options": { + "delay": 0.005, + "initCount": 1, + "minTime": 0.05, + "maxTime": 5, + "minSamples": 5 + }, + "samples": 85, + "promise": true, + "details": { + "min": 0.00003171388291139241, + "max": 0.00003909498101265823, + "mean": 0.00003274920259908526, + "median": 0.000032417335443037975, + "standardDeviation": 0.0000010300121882527498, + "marginOfError": 2.1897219524533558e-7, + "relativeMarginOfError": 0.6686336700346158, + "standardErrorOfMean": 1.1172050777823244e-7, + "sampleVariance": 1.060925107949218e-12, + "sampleResults": [ + 0.00003171388291139241, + 0.00003191080632911392, + 0.00003198596708860759, + 0.00003199878813018507, + 0.00003201280280791321, + 0.000032019248245054246, + 0.00003203423420548819, + 0.0000320383458838545, + 0.00003204082705807275, + 0.000032080833120204604, + 0.0000320945979578813, + 0.00003209798145780051, + 0.00003209921392405063, + 0.00003211411167836631, + 0.00003211994958519464, + 0.00003212787683471602, + 0.00003217173133375878, + 0.00003217623931078494, + 0.000032178731012658225, + 0.00003217914231014678, + 0.000032201023017902816, + 0.00003220898213146139, + 0.00003221865539246969, + 0.0000322306082278481, + 0.00003223901978302489, + 0.00003224361646458201, + 0.000032249849104859336, + 0.00003225239566049777, + 0.00003229632658227848, + 0.00003230458710912572, + 0.000032313409207161124, + 0.00003231440842373963, + 0.000032350474154435225, + 0.00003235365985960434, + 0.00003235492064516129, + 0.00003236107594128909, + 0.000032368622784810124, + 0.000032368856413529034, + 0.0000323726170886076, + 0.00003238837715379707, + 0.0000324042144224633, + 0.000032410389917038927, + 0.000032417335443037975, + 0.000032418037013401404, + 0.0000324412342054882, + 0.00003247523607594937, + 0.000032478844303797466, + 0.000032480574683544303, + 0.00003249508806636886, + 0.000032502962276214835, + 0.000032523125717932355, + 0.00003257021378430121, + 0.00003257218379068283, + 0.000032613567088607593, + 0.000032662898532227186, + 0.00003269432291001914, + 0.000032727996738421394, + 0.00003277309079283888, + 0.000032783603870967744, + 0.0000327918410976388, + 0.00003281539502233567, + 0.000032828802169751114, + 0.000032837316496163686, + 0.00003286176854219949, + 0.00003287299168797954, + 0.000032895220886075946, + 0.00003293841033822591, + 0.00003305218924050633, + 0.00003318915315890236, + 0.000033297321633694955, + 0.00003330847989789407, + 0.00003340336247606892, + 0.00003343491448627952, + 0.00003348907341772152, + 0.00003353116177429876, + 0.000033590142583120205, + 0.00003371865379746835, + 0.000033770510230179034, + 0.00003385200126582278, + 0.00003407077658227848, + 0.00003413538098276962, + 0.0000343212253164557, + 0.00003582968602425016, + 0.000036119744836775486, + 0.00003909498101265823 + ] + }, + "completed": true, + "percentSlower": 62.94 + }, + { + "name": "create 4 sublevels", + "ops": 22787, + "margin": 1.1, + "options": { + "delay": 0.005, + "initCount": 1, + "minTime": 0.05, + "maxTime": 5, + "minSamples": 5 + }, + "samples": 86, + "promise": true, + "details": { + "min": 0.00004243448813559322, + "max": 0.00005842204230118443, + "mean": 0.00004388532278658509, + "median": 0.00004330981015515214, + "standardDeviation": 0.0000022878028724785556, + "marginOfError": 4.835322514330239e-7, + "relativeMarginOfError": 1.1018085791107146, + "standardErrorOfMean": 2.4670012828215503e-7, + "sampleVariance": 5.2340419833211305e-12, + "sampleResults": [ + 0.00004243448813559322, + 0.00004244343522438611, + 0.00004245705762711864, + 0.00004247551905165114, + 0.0000424853214890017, + 0.00004257962013536379, + 0.000042618236886632825, + 0.00004262853389830508, + 0.0000426622461928934, + 0.00004270883050847457, + 0.00004271761779661017, + 0.0000427192906779661, + 0.00004272374111675127, + 0.00004274082148900169, + 0.000042745991539763115, + 0.000042751789340101526, + 0.00004276463959390863, + 0.0000427679593220339, + 0.0000427922385786802, + 0.0000428011641285956, + 0.0000428140744500846, + 0.00004284668189509307, + 0.000042856039763113366, + 0.00004287131610169491, + 0.00004288678257191201, + 0.00004290607627118644, + 0.000042929036379018614, + 0.00004293607372881356, + 0.000042952881556683587, + 0.00004297291525423729, + 0.00004299025254237288, + 0.00004299840862944163, + 0.00004304835025380711, + 0.0000430540686440678, + 0.00004305700677966102, + 0.000043073236886632826, + 0.00004309023181049069, + 0.00004316652711864407, + 0.00004316748094834886, + 0.00004317549406779661, + 0.000043189801184433164, + 0.00004323996531302876, + 0.00004328351692047377, + 0.00004333610338983051, + 0.000043375399323181046, + 0.00004338186717428088, + 0.0000433882910321489, + 0.000043430240270727585, + 0.00004345538050847458, + 0.00004346631525423729, + 0.00004350278934010152, + 0.00004351661505922166, + 0.00004356725042301184, + 0.000043591035532994925, + 0.00004361004822335025, + 0.00004363178172588832, + 0.00004371317935702199, + 0.000043774115059221656, + 0.000043878568527918776, + 0.0000439072614213198, + 0.00004395473519458545, + 0.00004395737225042301, + 0.000044045128595600676, + 0.000044143758037225046, + 0.000044199818950930624, + 0.00004423467428087986, + 0.000044295703891708967, + 0.00004432926355932203, + 0.000044528022842639595, + 0.00004455440016920474, + 0.00004457627664974619, + 0.00004460246023688664, + 0.000044616327411167515, + 0.000044672338409475466, + 0.000044757864636209817, + 0.000045009609983079525, + 0.00004516711844331641, + 0.00004529169081272085, + 0.00004532903045685279, + 0.00004546394923857868, + 0.00004598992790500424, + 0.000046027444162436545, + 0.000046066441624365484, + 0.00004686694247038917, + 0.00005598441370558375, + 0.00005842204230118443 + ] + }, + "completed": true, + "percentSlower": 72.34 + }, + { + "name": "get via sublevel", + "ops": 25779, + "margin": 3.32, + "options": { + "delay": 0.005, + "initCount": 1, + "minTime": 0.05, + "maxTime": 5, + "minSamples": 5 + }, + "samples": 70, + "promise": true, + "details": { + "min": 0.00003300552838709677, + "max": 0.00006082869881656805, + "mean": 0.00003879101649048303, + "median": 0.00003714802633136095, + "standardDeviation": 0.000005504770002879293, + "marginOfError": 0.0000012895738846684323, + "relativeMarginOfError": 3.3244137466333616, + "standardErrorOfMean": 6.579458595247103e-7, + "sampleVariance": 3.0302492784599686e-11, + "sampleResults": [ + 0.00003300552838709677, + 0.00003306345739644971, + 0.000033088705657978386, + 0.0000331666775147929, + 0.0000332454201145767, + 0.000033416195857988166, + 0.0000334953774665818, + 0.0000339746976331361, + 0.000034253379881656804, + 0.00003428085798816568, + 0.00003436600769230769, + 0.00003441587100591716, + 0.000034623993548387094, + 0.00003480895266272189, + 0.000034923631612903226, + 0.00003504090650887574, + 0.000035133862721893494, + 0.000035134505928853756, + 0.00003528501782304265, + 0.00003568111834319527, + 0.00003572912721893491, + 0.000035811252662721894, + 0.00003587390515595162, + 0.000036051968047337275, + 0.00003631742426035503, + 0.00003639714319526628, + 0.00003640170273711012, + 0.00003642740710059172, + 0.00003648883952347582, + 0.00003656489822485207, + 0.00003671371225806452, + 0.000036778592899408286, + 0.00003678442130177515, + 0.000036914219605346914, + 0.000037080045562130184, + 0.00003721600710059172, + 0.000037272643307638406, + 0.00003769090609670637, + 0.00003771029171597633, + 0.00003773159881656805, + 0.00003786027573964497, + 0.00003792635327816677, + 0.00003817900236686391, + 0.000038494997633136096, + 0.00003853044852071006, + 0.0000386156100591716, + 0.00003877670357393132, + 0.0000388135899408284, + 0.00003898943550295858, + 0.000039166890532544385, + 0.00003918962721893491, + 0.00003944695443786982, + 0.000039594433727810646, + 0.000039705004733727814, + 0.000040162662635264163, + 0.000041142165088757396, + 0.000041542453846153844, + 0.00004196745976331361, + 0.000043165184023668636, + 0.00004445256272189349, + 0.00004472883573243014, + 0.00004572720406435224, + 0.000046773333951762525, + 0.00004798054638218923, + 0.00004926698979591836, + 0.00004939325088757397, + 0.00005087957747671465, + 0.00005176118629343629, + 0.00005394944305019305, + 0.00006082869881656805 + ] + }, + "completed": true, + "percentSlower": 68.71 + }, + { + "name": "get via key path concatenation", + "ops": 55297, + "margin": 2.39, + "options": { + "delay": 0.005, + "initCount": 1, + "minTime": 0.05, + "maxTime": 5, + "minSamples": 5 + }, + "samples": 76, + "promise": true, + "details": { + "min": 0.000015546719589495924, + "max": 0.000025667216581276202, + "mean": 0.000018084231208409096, + "median": 0.000017483098400241475, + "standardDeviation": 0.000001918719817613655, + "marginOfError": 4.313808247488305e-7, + "relativeMarginOfError": 2.385397641610776, + "standardErrorOfMean": 2.2009225752491353e-7, + "sampleVariance": 3.681485738503378e-12, + "sampleResults": [ + 0.000015546719589495924, + 0.000015689552671294897, + 0.000015728515846664655, + 0.00001588731934802294, + 0.000016018427709025052, + 0.00001605782644129188, + 0.000016061394808330818, + 0.000016078115001509205, + 0.000016243464856230034, + 0.000016288800784787202, + 0.00001673225747057048, + 0.00001679643194888179, + 0.000016801713738019168, + 0.000016804146325878596, + 0.000016929188498402556, + 0.00001695792668918919, + 0.000016961852364864866, + 0.00001697718658146965, + 0.000016996270607028753, + 0.00001701066888016903, + 0.000017015885942492012, + 0.00001708215135135135, + 0.000017130035143769968, + 0.000017176475337837836, + 0.00001720185782747604, + 0.000017211051118210862, + 0.00001723911054313099, + 0.000017253350675675675, + 0.00001729205782747604, + 0.00001730876325878594, + 0.000017334076677316295, + 0.000017343723211590705, + 0.00001736751980830671, + 0.0000173941277027027, + 0.000017399542172523962, + 0.000017406184025559106, + 0.000017437076357827473, + 0.000017475956836703895, + 0.000017490239963779052, + 0.000017507849520766772, + 0.000017537112460063897, + 0.000017547671621621622, + 0.000017633066216216218, + 0.0000176617607028754, + 0.000017662759424920127, + 0.00001766367401146997, + 0.000017665397124600637, + 0.000017808100675675675, + 0.000017865112761647536, + 0.00001786714984025559, + 0.000017909424600638978, + 0.00001791417939189189, + 0.000018062308306709265, + 0.00001817925354663447, + 0.00001830796517571885, + 0.000018388825, + 0.000018535690878378376, + 0.000018744485303514377, + 0.00001875297412140575, + 0.00001883442076667673, + 0.000019027233926954422, + 0.000019228414729852097, + 0.000019290908542106853, + 0.00001953649290673106, + 0.000019816597947479628, + 0.000020340611228493815, + 0.000020823370926517573, + 0.000021196669009584667, + 0.000021547783881678235, + 0.000021598722607908242, + 0.000021695265016601266, + 0.000021877224870017332, + 0.000022120306325823223, + 0.00002227612088388215, + 0.00002318248505885904, + 0.000025667216581276202 + ] + }, + "completed": true, + "percentSlower": 32.88 + } + ], + "fastest": { + "name": "create 1 sublevels", + "index": 0 + }, + "slowest": { + "name": "create 4 sublevels", + "index": 3 + } +} \ No newline at end of file