Haro adalah datastore abadi modern yang dibangun dengan fitur ES6. Ini tidak dioreksi, dan menawarkan solusi "plug-and-play" untuk pemodelan, pencarian, & mengelola data pada klien, atau server (dalam RAM). Ini adalah struktur data yang sebagian persisten, dengan mempertahankan set versi catatan dalam versions (MVCC).
Semua metode sinkron.
Indeks Haro memiliki Map (field/property) > Map (value) > Set (PKs) yang memungkinkan pencarian cepat & mudah, serta inspeksi. Indeks dapat dikelola secara independen dari operasi del() & set() , misalnya Anda dapat dengan malas membuat indeks baru melalui reindex(field) , atau sortBy(field) .
Haro memiliki cakupan kode 100% dengan tesnya.
----------|---------|----------|---------|---------|-------------------------------------------------------------------------------------------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------|---------|----------|---------|---------|-------------------------------------------------------------------------------------------------------
All files | 100 | 83.56 | 100 | 100 |
haro.cjs | 100 | 83.56 | 100 | 100 | 49-75,108,163-175,192,224-228,242,264,266,274,308,326,353-354,359-361,375-378,380,437,475,482,486-496
----------|---------|----------|---------|---------|------------------------------------------------------------------------------------------------------- Ekspor yang disebutkan adalah haro , dan kelas yang diekspor adalah Haro .
import { haro } from 'haro' ; const { haro } = require ( 'haro' ) ; Haro mengambil dua argumen opsional, yang pertama adalah Array catatan untuk ditetapkan secara tidak sinkron, & yang kedua adalah deskriptor konfigurasi.
const storeDefaults = haro ( ) ;
const storeRecords = haro ( [ { name : 'John Doe' , age : 30 } , { name : 'Jane Doe' , age : 28 } ] ) ;
const storeCustom = haro ( null , { key : 'id' } ) ; const store = haro ( null , { index : [ 'name' , 'age' ] } ) ,
data = [ { name : 'John Doe' , age : 30 } , { name : 'Jane Doe' , age : 28 } ] ;
const records = store . batch ( data , 'set' ) ;
console . log ( records [ 0 ] ) ; // [$uuid, {name: 'John Doe', age: 30}]
console . log ( store . size ) ; // 2
console . log ( store . find ( { age : 28 } ) ) ; // [[$uuid, {name: 'Jane Doe', age: 28}]]
console . log ( store . search ( / ^ja / i , 'name' ) ) ; // [[$uuid, {name: 'Jane Doe', age: 28}]]
console . log ( store . search ( arg => age < 30 , 'age' ) ) ; // [[$uuid, {name: 'Jane Doe', age: 28}]] const store = haro ( ) ;
let arg ;
arg = store . set ( null , { abc : true } ) ;
arg = store . set ( arg [ 0 ] , { abc : false } ) ;
arg = store . set ( arg [ 0 ] , { abc : true } ) ;
store . versions . get ( arg [ 0 ] ) . forEach ( i => console . log ( i [ 0 ] ) ) ; // {abc: true}, {abc: false} Benchmark termasuk dalam repositori, dan berguna untuk mengukur bagaimana Haro akan tampil di berbagai perangkat keras, & perangkat lunak.
time to batch insert data: 6.7825 ms
datastore record count: 1000
name indexes: 1000
testing time to 'find()' a record (first one is cold):
0.063375ms
0.004583ms
0.002417ms
0.003459ms
0.001916ms
testing time to 'search(regex, index)' for a record (first one is cold):
0.147792ms
0.051209ms
0.050958ms
0.051125ms
0.052166ms
time to override data: 0.361709 ms
testing time to 'search(regex, index)' on overridden data for a record (first one is cold):
0.053083ms
0.051916ms
0.027459ms
0.0275ms
0.032292ms
Fungsi
Acara pendengar untuk sebelum operasi batch, menerima type , data .
Fungsi
Acara pendengar untuk sebelum membersihkan penyimpanan data.
Fungsi
Acara pendengar untuk sebelum catatan dihapus, menerima key , batch .
Fungsi
Acara pendengar untuk sebelum catatan ditetapkan, menerima key , data .
Array
Array nilai ke indeks. Indeks komposit didukung, dengan menggunakan pembatas default ( this.delimiter ). Non-kecocokan dalam komposit menghasilkan nilai kosong.
Contoh bidang/properti untuk indeks:
const store = haro ( null , { index : [ 'field1' , 'field2' , 'field1|field2|field3' ] } ) ;Rangkaian
Kunci Object Opsional Untuk memanfaatkan sebagai tombol Map , default ke UUID versi 4 jika tidak ditentukan, atau ditemukan.
Contoh menentukan kunci utama:
const store = haro ( null , { key : 'field' } ) ;Boolean
Log pesan penyimpanan persisten ke console , default true .
Fungsi
Acara pendengar untuk operasi batch, menerima dua argumen ['tipe', Array ].
Fungsi
Pendengar acara untuk membersihkan toko data.
Fungsi
Acara Pendengar Saat Catatan Dihapus, Menerima Kunci Catatan.
Fungsi
Acara pendengar ketika penyimpanan data mengubah seluruh set data, menerima String yang menamai apa yang berubah ( indexes atau records ).
Fungsi
Acara pendengar saat catatan ditetapkan, menerima Array .
Boolean
Aktifkan/Nonaktifkan Versi Catatan Gaya MVCC, Default false . Versi disimpan dalam Sets untuk iterasi yang mudah.
Contoh Mengaktifkan Versi:
const store = haro ( null , { versioning : true } ) ; Peta
Map catatan, diperbarui oleh del() & set() .
Peta
Peta indeks, yang merupakan set yang berisi kunci peta.
Array
Array mewakili urutan this.data .
Nomor
Jumlah catatan di datastore.
Peta
Map Sets catatan, diperbarui dengan set() .
Array
Argumen pertama harus merupakan Array , dan argumen kedua harus del atau set .
const haro = require ( 'haro' ) ,
store = haro ( null , { key : 'id' , index : [ 'name' ] } ) ,
nth = 100 ,
data = [ ] ;
let i = - 1 ;
while ( ++ i < nth ) {
data . push ( { id : i , name : 'John Doe' + i } ) ;
}
// records is an Array of Arrays
const records = store . batch ( data , 'set' ) ;diri sendiri
Menghapus semua pasangan kunci/nilai dari datastore.
Contoh Membersihkan Datastore:
const store = haro ( ) ;
// Data is added
store . clear ( ) ;Belum diartikan
Menghapus catatan.
Contoh menghapus catatan:
const store = haro ( ) ,
rec = store . set ( null , { abc : true } ) ;
store . del ( rec [ 0 ] ) ;
console . log ( store . size ) ; // 0Array atau objek
Mengembalikan catatan atau indeks datastore sebagai Array atau Object yang dapat berubah, untuk tujuan penggunaan kembali/persisten tanpa mengandalkan adaptor yang akan memecah set data.
const store = haro ( ) ;
// Data is loaded
const records = store . dump ( ) ;
const indexes = store . dump ( 'indexes' ) ;
// Save records & indexesMapiterator
Mengembalikan objek Iterator baru yang berisi array [key, value] untuk setiap elemen dalam objek Map dalam urutan penyisipan.
Contoh menghapus catatan:
const store = haro ( ) ;
let item , iterator ;
// Data is added
iterator = store . entries ( ) ;
item = iterator . next ( ) ;
do {
console . log ( item . value ) ;
item = iterator . next ( ) ;
} while ( ! item . done ) ;Array
Mengembalikan Array Arrays ganda dengan bentuk [key, value] untuk catatan yang dikembalikan true ke callbackFn(value, key) .
Contoh memfilter datastore:
const store = haro ( ) ;
// Data is added
store . filter ( function ( value ) {
return value . something === true ;
} ) ;Array
Mengembalikan Array Arrays ganda dengan ditemukan oleh nilai -nilai yang diindeks yang cocok dengan di where .
Contoh menemukan catatan dengan kecocokan identitas:
const store = haro ( null , { index : [ 'field1' ] } ) ;
// Data is added
store . find ( { field1 : 'some value' } ) ;Belum diartikan
Panggilan callbackFn Sekali untuk setiap pasangan nilai kunci yang ada di objek Map , dalam urutan penyisipan. Jika parameter thisArg disediakan untuk forEach , itu akan digunakan sebagai nilai this untuk setiap panggilan balik.
Contoh menghapus catatan:
const store = haro ( ) ;
store . set ( null , { abc : true } ) ;
store . forEach ( function ( value , key ) {
console . log ( key ) ;
} ) ;Array
Mendapat catatan sebagai Array ganda dengan bentuk [key, value] .
Contoh mendapatkan catatan dengan nilai kunci utama yang diketahui:
const store = haro ( ) ;
// Data is added
store . get ( 'keyValue' ) ;Boolean
Mengembalikan Boolean yang menunjukkan jika penyimpanan data berisi key .
Contoh memeriksa catatan dengan nilai kunci utama yang diketahui:
const store = haro ( ) ;
// Data is added
store . has ( 'keyValue' ) ; // true or falseMapiterator
Mengembalikan objek Iterator baru yang berisi kunci untuk setiap elemen dalam objek Map dalam urutan penyisipan.`
Contoh mendapatkan iterator, dan mencatat hasilnya:
const store = haro ( ) ;
let item , iterator ;
// Data is added
iterator = store . keys ( ) ;
item = iterator . next ( ) ;
do {
console . log ( item . value ) ;
item = iterator . next ( ) ;
} while ( ! item . done ) ;Array
Mengembalikan Array Arrays ganda dengan bentuk [key, value] untuk rentang catatan yang sesuai.
Contoh Paginating Suatu Set Data:
const store = haro ( ) ;
let ds1 , ds2 ;
// Data is added
console . log ( store . size ) ; // >10
ds1 = store . limit ( 0 , 10 ) ; // [0-9]
ds2 = store . limit ( 10 , 10 ) ; // [10-19]
console . log ( ds1 . length === ds2 . length ) ; // true
console . log ( JSON . stringify ( ds1 [ 0 ] [ 1 ] ) === JSON . stringify ( ds2 [ 0 ] [ 1 ] ) ) ; // falseArray
Mengembalikan Array pengembalian callbackFn(value, key) . Jika raw true , Array dikembalikan.
Contoh pemetaan datastore:
const store = haro ( ) ;
// Data is added
store . map ( function ( value ) {
return value . property ;
} ) ;Boolean
Ini dimaksudkan untuk digunakan dalam override berpasangan dari indeks & catatan, sehingga Anda dapat menghindari jalur kode berbasis Promise dari insert atau load() batch() (). Menerima parameter ketiga opsional untuk melakukan transformasi untuk menyederhanakan masalah domain lintas.
Contoh utama datastore:
const store = haro ( ) ;
store . override ( { 'field' : { 'value' : [ 'pk' ] } } , "indexes" ) ;Array
Menjalankan fungsi yang terinspirasi Array.reduce() terhadap penyimpanan data ( Map ).
Contoh memfilter datastore:
const store = haro ( ) ;
// Data is added
store . reduce ( function ( accumulator , value , key ) {
accumulator [ key ] = value ;
return accumulator ;
} , { } ) ;Haro
Mengindeks ulang datastore, dipanggil jika mengubah nilai index .
Contoh pemetaan datastore:
const store = haro ( ) ;
// Data is added
// Creating a late index
store . reindex ( 'field3' ) ;
// Recreating indexes, this should only happen if the store is out of sync caused by developer code.
store . reindex ( ) ;Array
Mengembalikan Array Arrays ganda dengan bentuk [key, value] catatan yang ditemukan arg yang cocok. Jika arg adalah Function (parameter adalah value & index ) kecocokan dilakukan jika hasilnya true , jika arg adalah RegExp nilai bidang harus .test() sebagai true , jika tidak nilainya harus menjadi kecocokan identitas. Parameter index dapat berupa String atau Array Strings ; Jika tidak disuplai itu default ke this.index .
Arrays yang diindeks yang diuji dengan RegExp akan diperlakukan sebagai String yang dibatasi koma, misalnya ['hockey', 'football'] menjadi 'hockey, football' untuk RegExp .
Contoh pencarian dengan fungsi predikat:
const store = haro ( null , { index : [ 'name' , 'age' ] } ) ,
data = [ { name : 'John Doe' , age : 30 } , { name : 'Jane Doe' , age : 28 } ] ;
store . batch ( data , 'set' )
console . log ( store . search ( function ( age ) {
return age < 30 ;
} , 'age' ) ) ; // [[$uuid, {name: 'Jane Doe', age: 28}]]Obyek
Rekam di Datastore. Jika key adalah false A Versi 4 UUID akan dihasilkan.
Jika override true , catatan yang ada akan diganti alih -alih diubah.
Contoh membuat catatan:
const store = haro ( null , { key : 'id' } ) ,
record = store . set ( null , { id : 1 , name : 'John Doe' } ) ;
console . log ( record ) ; // [1, {id: 1, name: 'Jane Doe'}]Array
Mengembalikan array dari Datastore, diurutkan berdasarkan callbackFn .
Contoh penyortiran seperti Array :
const store = haro ( null , { index : [ 'name' , 'age' ] } ) ,
data = [ { name : 'John Doe' , age : 30 } , { name : 'Jane Doe' , age : 28 } ] ;
store . batch ( data , 'set' )
console . log ( store . sort ( ( a , b ) => a < b ? - 1 : ( a > b ? 1 : 0 ) ) ) ; // [{name: 'Jane Doe', age: 28}, {name: 'John Doe', age: 30}]Array
Mengembalikan Array Arrays ganda dengan bentuk [key, value] catatan diurutkan berdasarkan indeks.
Contoh penyortiran dengan indeks:
const store = haro ( null , { index : [ 'name' , 'age' ] } ) ,
data = [ { name : 'John Doe' , age : 30 } , { name : 'Jane Doe' , age : 28 } ] ;
store . batch ( data , 'set' )
console . log ( store . sortBy ( 'age' ) ) ; // [[$uuid, {name: 'Jane Doe', age: 28}], [$uuid, {name: 'John Doe', age: 30}]]Array
Mengembalikan array datastore.
Contoh casting ke Array :
const store = haro ( ) ,
data = [ { name : 'John Doe' , age : 30 } , { name : 'Jane Doe' , age : 28 } ] ;
store . batch ( data , 'set' )
console . log ( store . toArray ( ) ) ; // [{name: 'John Doe', age: 30}, {name: 'Jane Doe', age: 28}]Mapiterator
Mengembalikan objek Iterator baru yang berisi nilai untuk setiap elemen dalam objek Map dalam urutan penyisipan.
Contoh iterasi nilai:
const store = haro ( ) ,
data = [ { name : 'John Doe' , age : 30 } , { name : 'Jane Doe' , age : 28 } ] ;
store . batch ( data , 'set' )
const iterator = store . values ( ) ;
let item = iterator . next ( ) ;
while ( ! item . done ) {
console . log ( item . value ) ;
item = iterator . next ( ) ;
} ;Array
Ideal untuk saat berurusan dengan indeks gabungan yang berisi Array nilai, yang akan membuat pencocokan pada nilai tunggal tidak mungkin saat menggunakan find() .
const store = haro ( null , { key : 'guid' , index : [ 'name' , 'name|age' , 'age' ] } ) ,
data = [ { guid : 'abc' , name : 'John Doe' , age : 30 } , { guid : 'def' , name : 'Jane Doe' , age : 28 } ] ;
store . batch ( data , 'set' ) ;
console . log ( store . where ( { name : 'John Doe' , age : 30 } ) ) ; // [{guid: 'abc', name: 'John Doe', age: 30}] Hak Cipta (C) 2024 Jason Mulligan dilisensikan di bawah lisensi BSD-3