colddb/README.md

162 lines
3.7 KiB
Markdown
Raw Normal View History

2015-04-06 17:55:11 +02:00
FlatDB
===========
FlatDB is a lua library that implements a serverless, zero-configuration, NoSQL database engine.<br>
It provides a key-value storage system using plain Lua tables.
When To Use FlatDB
===========
When you want to use SQLite to store data, just take a glance at FlatDB.<br>
When Lua acts in your program as the major language or the embedded scripting language, just try using FlatDB.
Concept
==========
| FlatDB | Disk | Lua |
|:--------------:|:-------------:|:--------------:|
| Database | Directory | Table |
2015-04-07 09:37:11 +02:00
| Page | File | Table |
2015-04-06 17:55:11 +02:00
| Key-value pair | File content | Key-value pair |
Keys and values can be all Lua types except coroutines, userdata, cdata and C functions.
Usage
==========
Copy *flatdb.lua* file to your project or where your lua libraries stored.<br>
Then write this in any Lua file where you want to use it:
```lua
local flatdb = require 'flatdb'
```
2015-04-06 15:57:17 +02:00
1. Bind a directory as a database
2015-04-06 17:55:11 +02:00
```lua
local db = flatdb('./db')
```
2015-04-07 09:37:11 +02:00
2. Open or create a page
2015-04-06 17:55:11 +02:00
```lua
2015-04-07 09:37:11 +02:00
if not db.page then
db.page = {}
2015-04-06 17:55:11 +02:00
end
```
2015-04-06 15:57:17 +02:00
3. Store key-value items
2015-04-06 17:55:11 +02:00
```lua
2015-04-07 09:37:11 +02:00
db.page.key = 'value'
-- equivalent to db.page['key'] = 'value'
2015-04-06 17:55:11 +02:00
```
2015-04-06 15:57:17 +02:00
4. Retrieve items
2015-04-06 17:55:11 +02:00
```lua
2015-04-07 09:37:11 +02:00
print(db.page.key) -- prints 'value'
2015-04-06 17:55:11 +02:00
```
2015-04-06 15:57:17 +02:00
5. Save to file
2015-04-06 17:55:11 +02:00
```lua
db:save()
2015-04-07 09:37:11 +02:00
-- 'page' will be saved to './db/page'
2015-04-06 17:55:11 +02:00
```
More usage can be found in the *cli.lua*(a Redis-like command line interface example using FlatDB).
Quick Look
==========
```lua
local flatdb = require("flatdb")
-- open a directory as a database
2015-04-07 09:37:11 +02:00
-- 'db' is just a plain empty Lua table that can contain pages
2015-04-06 17:55:11 +02:00
local db = flatdb("./db")
2015-04-07 09:37:11 +02:00
-- open or create a page named "default"
2015-04-06 17:55:11 +02:00
-- it is also a plain empty Lua table where key-value pair stored in
if not db.default then
db.default = {}
end
2015-04-07 09:37:11 +02:00
-- extend db methods for getting values from 'default' page
2015-04-06 17:55:11 +02:00
flatdb.hack.get = function(db, key)
return db.default[key]
end
2015-04-07 09:37:11 +02:00
-- extend db methods for setting values to 'default' page
2015-04-06 17:55:11 +02:00
flatdb.hack.set = function(db, key, value)
db.default[key] = value
end
-- extend db methods for watching new key
flatdb.hack.guard = function(db, f)
setmetatable(db.default, {__newindex = f})
end
2015-04-07 09:37:11 +02:00
-- get key-value data from 'default' page
2015-04-06 17:55:11 +02:00
print(db:get("hello"))
2015-04-07 09:37:11 +02:00
-- set key-value data to 'default' page
2015-04-06 17:55:11 +02:00
db:set("hello", "world")
2015-04-07 09:37:11 +02:00
-- get key-value data from 'default' page
2015-04-06 17:55:11 +02:00
print(db:get("hello"))
-- set guard function
2015-04-07 09:37:11 +02:00
db:guard(function(page, key, value)
2015-04-06 17:55:11 +02:00
print("CREATE KEY permission denied!")
end)
2015-04-07 09:37:11 +02:00
-- try creating new key-value pair to 'default' page
2015-04-06 17:55:11 +02:00
db:set("key1", 1)
db:set("key2", 2)
-- update an existing key-value pair
db:set("hello", "bye")
print(db:get("key1")) -- prints nil
print(db:get("key2")) -- prints nil
print(db:get("hello")) -- prints 'bye'
2015-04-07 09:37:11 +02:00
-- store 'default' page to './db/default' file
2015-04-06 17:55:11 +02:00
db:save()
```
API
==========
- **Functions**
- **flatdb(dir) --> db**
Bind a directory as a database, returns nil if 'dir' doesn't exists. Otherwise, it returns a 'db' obeject.
2015-04-07 09:37:11 +02:00
- **db:save([page])**
2015-04-06 17:55:11 +02:00
2015-04-07 09:37:11 +02:00
Save all pages or the given page(if specified) contained in db to file. The 'page' argument is a string, the page's name.
2015-04-06 17:55:11 +02:00
- **Tables**
- **flatdb.hack**
2015-04-07 09:37:11 +02:00
The 'hack' table contains db's methods. There is only one method 'save(db, page)' in it by default.
2015-04-06 17:55:11 +02:00
It is usually used to extend db methods.
Dependencies
=======
- [pp](https://github.com/luapower/pp)
- [lfs](http://keplerproject.github.io/luafilesystem/)
All above libraries can be found in [LuaPower](https://luapower.com/).
License
=======
FlatDB is distributed under the MIT license.