A time series database.

A Timeseries Database

seriesly is a database for storing and querying time series data. Unlike databases like RRDtool, it's schemaless so you can just lob data into it and start hacking. However, it also doesn't use a finite amount of space. Tradeoffs.

Detailed docs are in the wiki.

Quick Start

Prereqs:

To build the software, you need a go runtime installed. Preferably a recent one.

Installation

go get github.com/dustin/seriesly

Running

Seriesly will use as many cores as you have to offer. Set the GOMAXPROCS environment variable to the number of cores (or hardware threads) you've got. There's a lot of fine-grained tuning you can employ to specify how to map the software needs to your hardware, but the defaults should work quite well.

Then just start blasting data into it. See the protocol docs for details on this.

More Info

My blog post provides an overview of the why and a little bit of the what. There's also a youtube video of me demoing the software a few days after the initial version hit github. It's matured a lot since then, but the core concepts haven't changed.

Owner
Comments
  • adding ability to bulk delete documents by range

    adding ability to bulk delete documents by range

    Due to my naivety about couchdb testing this was confusing at first. All the docs were still there and my DB was still 54MB. So - while I did implement deletion, it doesn't seem to be very effective at recovering disk space. What can we do about that? Purge?

    btw, the syntax is: DELETE on /dbname/_bulk accepted querystring parameters are: from: (starting id to delete) to: (ending id to delete) compact: (set to true to run compact after the delete)

  • seriesly crashes if only group parameter is specified in query

    seriesly crashes if only group parameter is specified in query

    Got this:

    unexpected fault address 0x0
    throw: fault
    [signal 0xb code=0x80 addr=0x0 pc=0x7eff836f69bb]
    
    goroutine 1 [chan receive]:
    net.(*pollServer).WaitRead(0xf8400d2080, 0xf8400d8000, 0xf840069a20, 0xb, 0x1, ...)
        /usr/local/go/src/pkg/net/fd.go:268 +0x73
    net.(*netFD).accept(0xf8400d8000, 0x4d4e7b, 0x0, 0xf84006b210, 0xf840081040, ...)
        /usr/local/go/src/pkg/net/fd.go:622 +0x20d
    net.(*TCPListener).AcceptTCP(0xf840081490, 0xf840193360, 0x0, 0x0unexpected fault address , 0x80x0, ...)
        /usr/local/go/src/pkg/net/tcpsock_posix.go:320 +0x71
    net.(*TCPListener).Accept(0xf840081490, 0x0, 0x0, 0x0
    , 0x0, ...)
        /usr/local/go/src/pkg/net/tcpsock_posix.go:330 +0x49
    net/http.(*Server).Serve(0xf8400afd80, 0xf8400d2100, 0xf840081490, 0x0, 0x0unexpected fault address , ...)
    0x0
        /usr/local/go/src/pkg/net/http/server.go:1014 +0x88
    net/http.(*Server).ListenAndServe(0xf8400afd80, 0x7473694c0000001f, 0x7eff83ab2f48, 0x100000001)
        /usr/local/go/src/pkg/net/http/server.go:1004 +0xb6
    main.main()
        unexpected fault address /opt/go/src/pkg/github.com/dustin/seriesly/main.go:0x0235
     +0x40c
    
    goroutine 2 [syscall]:
    created by runtime.main
        /tmp/bindist927634324/go/src/pkg/runtime/proc.c:221
    
    goroutine 3 [runnable]:
    github.com/dustin/go-couchstore._Cfunc_CString(0xf84006abe0, 0xf800000010, 0x6259cc, 0x756f632e00000006, 0xf84006abe0, ...)
        /tmp/go-build617365700/github.com/dustin/go-couchstore/_obj/_cgo_defun.c:31 +0x29
    github.com/dustin/go-couchstore.Open(0xf84006abe0, 0x100000010, 0xf84006ab00, 0x0, 0x0, ...)
        /tmp/go-build617365700/github.com/dustin/go-couchstore/_obj/_cgo_gotypes.go:313 +0x8d
    main.dbopen(0xf84018ee75, 0x6, 0x765278, 0xf8400709a0, 0x765278, ...)
        /opt/go/src/pkg/github.com/dustin/seriesly/database.go:60 +0x4c
    main.process_docs(0xf8400c4e80, 0x1a846038)
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:100 +0xfa
    main.docProcessor(0xf840001190, 0x0)
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:162 +0xeb
    created by main.main
        /opt/go/src/pkg/github.com/dustin/seriesly/main.go:206 +0x239
    
    goroutine 4 [chan send]:
    main.fetchDocs(0xf84018ee75, 0x6, 0x12b38dfe18037680, 0xf840081948, 0x100000001, ...)
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:176 +0x155
    main._func_009(0xf840081f10, 0xf840079f90, 0xf840079f80, 0xf840081f28, 0xf840081f18, ...)
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:208 +0x1dd
    github.com/dustin/go-couchstore.callbackAdapt(0x3d560c0, 0x3d55e50, 0xf840081f30, unexpected fault address 0x7eff81628c00, 0x7eff83ab5100, ...)
        /tmp/go-build617365700/github.com/dustin/go-couchstore/_obj/_cgo_gotypes.go:591 +0xb7
    ----- stack segment boundary -----
    github.com/dustin/go-couchstore._Cfunc_start_all_docs(0x3d560c0, 0x3d31010)
        /tmp/go-build617365700/github.com/dustin/go-couchstore/_obj/_cgo_defun.c:0x0170 +0x2f
    
    github.com/dustin/go-couchstore.(*Couchstore).Walk(0xf840079f70, 0x622bf4, 0x0, 0xf8400f3000, 0x0, ...)
        /tmp/go-build617365700/github.com/dustin/go-couchstore/_obj/_cgo_gotypes.go:610 +0xa9
    main.runQuery(0xf8404c9dc0, 0x1a1b7ca8)
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:222 +0x30a
    main.queryExecutor(0xf840001140, 0x0)
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:236 +0xf0
    created by main.main
        /opt/go/src/pkg/github.com/dustin/seriesly/main.go:222 +0x2c1
    
    goroutine 5 [syscall]:
    syscall.Syscall6()
        /tmp/bindist927634324/go/src/pkg/syscall/asm_linux_amd64.s:40 +0x5
    syscall.EpollWait(0xf800000006, 0xf8400d7010, 0xa0000000a, 0x1b, 0xc, ...)
        /usr/local/go/src/pkg/syscall/zerrors_linux_amd64.go:1781 +0xa1
    net.(*pollster).WaitFD(0xf8400d7000, 0xf8400d2080, 0x1959420, 0x0, 0x0, ...)
        /usr/local/go/src/pkg/net/fd_linux.go:146 +0x110
    net.(*pollServer).Run(0xf8400d2080, 0x0)
        /usr/local/go/src/pkg/net/fd.go:236 +0xe4
    created by net.newPollServer
        /usr/local/go/src/pkg/net/newpollserver.go:35 +0x382
    
    goroutine 18 [select]:
    main.dbWriteLoop(0xf8400ff7b0, 0x0)
        /opt/go/src/pkg/github.com/dustin/seriesly/database.go:143 +0x6af
    created by main.dbWriteFun
        /opt/go/src/pkg/github.com/dustin/seriesly/database.go:202 +0x115
    
    goroutine 7 [syscall]:
    created by addtimer
        /tmp/bindist927634324/go/src/pkg/runtime/ztime_amd64.c:72
    
    goroutine 1201 [runnable]:
    main.query(0xf8401b1b30, 0x100000001, 0xf8400d2340, 0xf840199040, 0xf84039b600, ...)
        /opt/go/src/pkg/github.com/dustin/seriesly/handlers.go:169unexpected fault address  +0xfd6
    main.handler0x0(
    0xf8400d2340, 0xf840199040, 0xf84039b600, 0x47edf9, 0x406cb3, ...)
        /opt/go/src/pkg/github.com/dustin/seriesly/main.go:149 +0x274
    net/http.HandlerFunc.ServeHTTP(0x406cb3, 0xf8400d2340, 0xf840199040, 0xf84039b600, 0xf840199040, ...)
        /usr/local/go/src/pkg/net/http/server.go:690 +0x3d
    net/http.(*conn).serve(0xf8400c3660, 0x0)
        /usr/local/go/src/pkg/net/http/server.go:656 +0x621
    created by net/http.(*Server).Serve
        /usr/local/go/src/pkg/net/http/server.go:1042 +0x430
    
    goroutine 19 [select]:
    github.com/dustin/go-couchstore._func_001(0xf840081980, 0xf840081978, 0x0, 0x0)
        /tmp/go-build617365700/github.com/dustin/go-couchstore/_obj/_cgo_gotypes.go:231 +0x273
    created by github.com/dustin/go-couchstore.(*Couchstore).Bulk
        /tmp/go-build617365700/github.com/dustin/go-couchstore/_obj/_cgo_gotypes.go:241 +0xf5
    
    goroutine 1202 [syscall]:
    github.com/dustin/go-couchstore._Cfunc_couchstore_open_doc_with_docinfo(0x7eff78047520, 0xf840107000)
        /tmp/go-build617365700/github.com/dustin/go-couchstore/_obj/_cgo_defun.c:114 +0x2f
    github.com/dustin/go-couchstore.(*Couchstore).GetFromDocInfo(0xf840079e90, 0xf840107000, 0x4227a8, 0x50, 0x100000000, ...)
        /tmp/go-build617365700/github.com/dustin/go-couchstore/_obj/_cgo_gotypes.go:527 +0x83
    main._func_023(0xf840081e30, 0xf840079e20, 0xf840081e28, 0x40b7d5, 0xf840107000, ...)
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:123 +0x35
    main._func_008(0xf840079e20, 0xf840081e30, 0xf840081e28, 0x0, 0x0, ...)
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:134 +0xf3
    created by unexpected fault address main.process_docs
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go0x0:139
     +0x4ac
    
    goroutine 30 [finalizer wait]:
    created by runtime.gc
        /tmp/bindist927634324/go/src/pkg/runtime/mgc0.c:882
    
    goroutine 1203 [syscall]:
    github.com/dustin/go-couchstore._Cfunc_couchstore_open_doc_with_docinfo(0x3d5a4d0, 0xf840107050)
        /tmp/go-build617365700/github.com/dustin/go-couchstore/_obj/_cgo_defun.c:114 +0x2f
    github.com/dustin/go-couchstore.(*Couchstore).GetFromDocInfo(0xf840079da0, 0xf840107050, 0x4227a8, 0x50, 0x100000000, ...)
        /tmp/go-build617365700/github.com/dustin/go-couchstore/_obj/_cgo_gotypes.go:527 +0x83
    main._func_023(0xf840081e10, 0xf840079d90, 0xf840081e18, 0x40b7d5, 0xf840107050, ...)
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:123 +0x35
    main._func_008(0xf840079d90, 0xf840081e10, 0xf840081e18, 0x0, 0x0, ...)
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:134 +0xf3
    created by main.process_docs
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:139 +0x4ac
    
    goroutine 1204 [syscall]:
    github.com/dustin/go-couchstore._Cfunc_couchstore_open_doc_with_docinfo(0x3d55ca0, 0xf8401070a0)
        /tmp/go-build617365700/github.com/dustin/go-couchstore/_obj/_cgo_defun.c:114 +0x2f
    github.com/dustin/go-couchstore.(*Couchstore).GetFromDocInfo(0xf840079aa0, 0xf8401070a0, 0x4227a8, 0x50, 0x100000000, ...)
        /tmp/go-build617365700/github.com/dustin/go-couchstore/_obj/_cgo_gotypes.go:527 +0x83
    main._func_023(0xf840081f20, 0xf840079e40, 0xf840081ff0, 0x40b7d5, 0xf8401070a0, ...)
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:123 +0x35
    main._func_008(0xf840079e40, 0xf840081f20, 0xf840081ff0, 0x0, 0x0, ...)
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:134 +0xf3
    created by main.process_docs
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:139 +0x4ac
    
    goroutine 1205 [syscall]:
    github.com/dustin/go-couchstore._Cfunc_couchstore_open_doc_with_docinfo(0x3d55e50, 0xf840107e10)
        /tmp/go-build617365700/github.com/dustin/go-couchstore/_obj/_cgo_defun.c:114 +0x2f
    github.com/dustin/go-couchstore.(*Couchstore).GetFromDocInfo(0xf840079f50, 0xf840107e10, 0x4227a8, 0x50, 0x100000000, ...)
        /tmp/go-build617365700/github.com/dustin/go-couchstore/_obj/_cgo_gotypes.go:527 +0x83
    main._func_023(0xf840081f48, 0xf840079f60, 0xf840081f40, 0x40b7d5, 0xf840107e10, ...)
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:123 +0x35
    main._func_008(0xf840079f60, 0xf840081f48, 0xf840081f40, 0x0, 0x0, ...)
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:134 +unexpected fault address 0xf3
    0x0created by 
    main.process_docs
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:139 +0x4ac
    
    goroutine 1206 [syscall]:
    github.com/dustin/go-couchstore._Cfunc_couchstore_open_doc_with_docinfo(0x3d5aad0, 0xf840107e60)
        /tmp/go-build617365700/github.com/dustin/go-couchstore/_obj/_cgo_defun.c:114 +0x2f
    github.com/dustin/go-couchstore.(*Couchstore).GetFromDocInfo(0xf8400f1950, 0xf840107e60, 0x4227a8, 0x50, 0x100000000, ...)
        /tmp/go-build617365700/github.com/dustin/go-couchstore/_obj/_cgo_gotypes.go:527 +0x83
    main._func_023(0xf840081f60, 0xf8400f1960, 0xf840081f58, 0x40b7d5, 0xf840107e60, ...)
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:123 +0x35
    main._func_008(0xf8400f1960, 0xf840081f60, 0xf840081f58, 0x0, 0x0, ...)
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:134 +0xf3
    created by main.process_docs
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:139 +0x4ac
    
    goroutine 1207 [syscall]:
    github.com/dustin/go-couchstore._Cfunc_couchstore_open_doc_with_docinfo(0x3d5ab40, 0xf840107eb0)
        /tmp/go-build617365700/github.com/dustin/go-couchstore/_obj/_cgo_defun.c:114 +0x2f
    github.com/dustin/go-couchstore.(*Couchstore).GetFromDocInfo(0xf8400f1520, 0xf840107eb0, 0x4227a8, 0x50, 0x100000000, ...)
        /tmp/go-build617365700/github.com/dustin/go-couchstore/_obj/_cgo_gotypes.go:527 +0x83
    main._func_023(0xf840081f80, 0xf8400f1530, 0xf840081f78, 0x40b7d5, 0xf840107eb0, ...)
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:123 +0x35
    main._func_008(0xf8400f1530, 0xf840081f80, 0xf840081f78, 0x0, 0x0, ...)
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:134 +0xf3
    created by main.process_docs
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:139 +0x4ac
    
    goroutine 1208 [syscall]:
    github.com/dustin/go-couchstore._Cfunc_couchstore_open_doc_with_docinfo(0x3d5d4a0, 0xf840107f00)
    unexpected fault address    /tmp/go-build617365700/github.com/dustin/go-couchstore/_obj/_cgo_defun.c:114 +0x2f
    github.com/dustin/go-couchstore.(*Couchstore).GetFromDocInfo(0x00xf8400f15b0, 0xf840107f00
    , 0x4227a8, 0x50, 0x100000000, ...)
        /tmp/go-build617365700/github.com/dustin/go-couchstore/_obj/_cgo_gotypes.go:527 +0x83
    main._func_023(0xf840081fa8, 0xf8400f15c0, 0xf840081fa0, 0x40b7d5, 0xf840107f00, ...)
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:123 +0x35
    main._func_008(0xf8400f15c0, 0xf840081fa8, 0xf840081fa0, 0x0, 0x0, ...)
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:134 +0xf3
    created by main.process_docs
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:139 +0x4ac
    
    goroutine 1209 [syscall]:
    github.com/dustin/go-couchstore._Cfunc_couchstore_open_doc_with_docinfo(0x3d5d650, 0xf840107f50)
        /tmp/go-build617365700/github.com/dustin/go-couchstore/_obj/_cgo_defun.c:114 +0x2f
    github.com/dustin/go-couchstore.(*Couchstore).GetFromDocInfo(0xf8400f16e0, 0xf840107f50, 0x4227a8, 0x50, 0x100000000, ...)
        /tmp/go-build617365700/github.com/dustin/go-couchstore/_obj/_cgo_gotypes.go:527 +0x83
    main._func_023(0xf840081fc0, 0xf8400f16f0, 0xf840081fb8, 0x40b7d5, 0xf840107f50, ...)
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:123 +0x35
    main._func_008(0xf8400f16f0, 0xf840081fc0, 0xf840081fb8, 0x0, 0x0, ...)
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:134 +0xf3
    created by main.process_docs
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:139 +0x4ac
    
    goroutine 1210 [syscall]:
    github.com/dustin/go-couchstore._Cfunc_couchstore_open_doc_with_docinfo(0x3d5d800, 0xf840107fa0)
        /tmp/go-build617365700/github.com/dustin/go-couchstore/_obj/_cgo_defun.c:114 +0x2f
    github.com/dustin/go-couchstore.(*Couchstore).GetFromDocInfo(0xf8401f4eb0, 0xf840107fa0, 0x4227a8, 0x50, 0x100000000, ...)
        /tmp/go-build617365700/github.com/dustin/go-couchstore/_obj/_cgo_gotypes.go:527 +0x83
    main._func_023(0xf840081fd8, 0xf8401f4ec0, 0xf840081fd0, 0x40b7d5, 0xf840107fa0, ...)
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:123 +0x35
    main._func_008(0xf8401f4ec0, 0xf840081fd8, 0xf840081fd0, 0x0, 0x0, ...)
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:134 +0xf3
    created by main.process_docs
        /opt/go/src/pkg/github.com/dustin/seriesly/query.go:139 +0x4ac
    throw: fault
    [signal 0xb code=0x80 addr=0x0 pc=0x7eff836f69bb]
    throw: fault
    [signal 0xb code=0x80 addr=0x0 pc=0x7eff836f69bb]
    throw: fault
    [signal 0xb code=0x80 addr=0x0 pc=0x7eff836f69bb]
    throw: fault
    [signal 0xb code=0x80 addr=0x0 pc=unexpected fault address 0x7eff836f69bb]
    0x0throw: 
    fault
    [signal 0xb code=0x80 addr=0x0 pc=0x7eff836f69bb]
    throw: fault
    [signal 0xb code=0x80 addr=0x0 pc=0x7eff836f69bb]
    throw: fault
    [signal 0xb code=0x80 addr=0x0 pc=0x7eff836f69bb]
    throw: fault
    [signal 0xb code=0x80 addr=0x0 pc=0x7eff836f69bb]
    throw: fault
    [signal 0xb code=0x80 addr=0x0 pc=0x7eff836f69bb]
    
  • README running examle

    README running examle

    README running section could use an example of running

    I only seem to touch golang (at best) only every 2 weeks, just enough time to forget how to use it, start it, etc.

  • Comprehensive interface to counter data

    Comprehensive interface to counter data

    I don't have a good way to handle counters now. It's easy enough to come up with a reducer that computes growth within a window, but that seems insufficient. Ideally, we want to pre-process the data and allow existing reducers to be meaningful over the windows.

    I don't expect it to be difficult since I've done this a bunch of times in different frameworks, but the bulk of my current data is all gauge.

    The only potential challenge is that I might need to guarantee the documents are pre-processed sequentially. They're queued sequentially, so they'll arrive in approximate sequential order and will just need a little bit of fixup.

  • Data is not stored after re-creation of non-empty database

    Data is not stored after re-creation of non-empty database

    Steps to reproduce:

    curl -XPUT http://127.0.0.1:3133/test
    curl -XPOST -d @my.json http://127.0.0.1:3133/test
    sleep 1
    curl -XGET http://127.0.0.1:3133/test
    curl -XDELETE http://127.0.0.1:3133/test
    curl -XPUT http://127.0.0.1:3133/test
    curl -XPOST -d @my.json http://127.0.0.1:3133/test
    sleep 1
    curl -XGET http://127.0.0.1:3133/test
    

    Output:

    {"deleted_count":0,"doc_count":1,"header_pos":4096,"last_seq":1,"space_used":153}
    {"deleted_count":0,"doc_count":0,"header_pos":0,"last_seq":0,"space_used":0}
    

    seriesly:

    $ seriesly -v -flushDelay=1ms
    2014/05/09 21:38:39 Listening to web requests on :3133
    2014/05/09 21:38:53 Flush of 1 items from timer took 86.798954ms
    2014/05/09 21:38:54 Flush of 1 items from timer took 91.54265ms
    
  • Missing Rollback calls

    Missing Rollback calls

    I think that in the kv branch, this and this lines should be replaced by something like:

    if err2 := dq.db.Rollback(); err2 != nil && err = nil {
            err = err2
    }
    return err
    
    
  • Empty documents makes seriesly crash on queries

    Empty documents makes seriesly crash on queries

    Adding empty documents makes seriesly crash on queries.

    2013/11/03 08:55:07 Listening to web requests on :3133
    panic: runtime error: slice bounds out of range
    
    goroutine 13 [running]:
    runtime.panic(0x697640, 0xbcdd8a)
        /usr/local/go/src/pkg/runtime/panic.c:266 +0xb6
    github.com/dustin/go-jsonpointer.FindMany(0xc2100007d8, 0x2, 0x2, 0xc21000a8f0, 0x1, ...)
        /home/vagrant/go/src/github.com/dustin/go-jsonpointer/bytes.go:236 +0x87f
    main.resolveFetch(0xc2100007d8, 0x2, 0x2, 0xc21000a8f0, 0x1, ...)
        /home/vagrant/go/src/github.com/dustin/seriesly/query.go:72 +0x98
    main.processDoc(0xc210070c80, 0xc2100007b0, 0x1, 0x1, 0xc2100007d8, ...)
        /home/vagrant/go/src/github.com/dustin/seriesly/query.go:110 +0x4ec
    main.func·025(0xc210070c80, 0xc210071401)
        /home/vagrant/go/src/github.com/dustin/seriesly/query.go:181 +0x12c
    main.func·026()
        /home/vagrant/go/src/github.com/dustin/seriesly/query.go:190 +0x110
    created by main.process_docs
        /home/vagrant/go/src/github.com/dustin/seriesly/query.go:195 +0x638
    
  • Crash/exit due to +Inf?

    Crash/exit due to +Inf?

    Another crash/exit with following message:

    2012/11/25 15:50:02 Error marshaling &{stats#1353858580000000000#11925538933135556274 1353858580000000000 [+Inf] 0}: json: error calling MarshalJSON for type *main.processOut: json: unsupported value: +Inf

  • creating dbRoot folder if missing

    creating dbRoot folder if missing

    This fixes 'no such file or directory' errors when passing zero args,

    Iv also added installation section to the wiki and separated api into a new section,

    This could be pulled from git://github.com/narkisr/seriesly.wiki.git into the mainline wiki.

    Thanks Ronen

  • time_test fails

    time_test fails

    the init function seems to be failing on:

    
    const exampleTimeString = "2012-08-28T21:24:35.37465188Z"
    const milliAccuracy = "2012-08-28T21:24:35.374Z"
    const secondAccuracy = "2012-08-28T21:24:35Z"
    
    var exampleTime time.Time
    
    func init() {
        var err error
        exampleTime, err = time.Parse(time.RFC3339Nano, exampleTimeString)
        if err != nil {
            panic(err)
        }
        if exampleTimeString != exampleTime.UTC().Format(time.RFC3339Nano) {
            log.Panicf("Expected %v, got %v", exampleTimeString,
                exampleTime.UTC().Format(time.RFC3339Nano))
        }
    }
    

    It reproduces on golang play also:

    http://play.golang.org/p/PMggvOZaHV

    To me it looks like time.Parse is broken somehow,

  • adding filtering and fixing getOrCreateDB

    adding filtering and fixing getOrCreateDB

    Not sure if this is how you want to handle the get/create db process -- I could refactor some other functions and eliminate the dbopenOrCreate method but it's up to you.

    I also don't know if you'll like the way I implemented filtering. Could probably be more efficient but I don't know enough about couchstore or go to really know.

🚀 fgprof is a sampling Go profiler that allows you to analyze On-CPU as well as Off-CPU (e.g. I/O) time together.
🚀 fgprof is a sampling Go profiler that allows you to analyze On-CPU as well as Off-CPU (e.g. I/O) time together.

?? fgprof - The Full Go Profiler fgprof is a sampling Go profiler that allows you to analyze On-CPU as well as Off-CPU (e.g. I/O) time together. Go's

Dec 31, 2022
FlyML perfomant real time mashine learning libraryes in Go

FlyML perfomant real time mashine learning libraryes in Go simple & perfomant logistic regression (~100 LoC) Status: WIP! Validated on mushrooms datas

May 30, 2022
Another AOC repo (this time in golang!)

advent-of-code Now with 100% more golang! (It's going to be a long advent of code...) To run: Get your data for a given year/day and copy paste it to

Dec 14, 2021
The Prometheus monitoring system and time series database.

Prometheus Visit prometheus.io for the full documentation, examples and guides. Prometheus, a Cloud Native Computing Foundation project, is a systems

Dec 31, 2022
VictoriaMetrics: fast, cost-effective monitoring solution and time series database
VictoriaMetrics: fast, cost-effective monitoring solution and time series database

VictoriaMetrics VictoriaMetrics is a fast, cost-effective and scalable monitoring solution and time series database. It is available in binary release

Jan 8, 2023
The Prometheus monitoring system and time series database.

Prometheus Visit prometheus.io for the full documentation, examples and guides. Prometheus, a Cloud Native Computing Foundation project, is a systems

Dec 31, 2022
Time Series Database based on Cassandra with Prometheus remote read/write support

SquirrelDB SquirrelDB is a scalable high-available timeseries database (TSDB) compatible with Prometheus remote storage. SquirrelDB store data in Cass

Oct 20, 2022
LinDB is an open-source Time Series Database which provides high performance, high availability and horizontal scalability.
LinDB is an open-source Time Series Database which provides high performance, high availability and horizontal scalability.

LinDB is an open-source Time Series Database which provides high performance, high availability and horizontal scalability. LinDB stores all monitoring data of ELEME Inc, there is 88TB incremental writes per day and 2.7PB total raw data.

Jan 1, 2023
TalariaDB is a distributed, highly available, and low latency time-series database for Presto
TalariaDB is a distributed, highly available, and low latency time-series database for Presto

TalariaDB is a distributed, highly available, and low latency time-series database that stores real-time data. It's built on top of Badger DB.

Nov 16, 2022
🤔 A minimize Time Series Database, written from scratch as a learning project.
🤔 A minimize Time Series Database, written from scratch as a learning project.

mandodb ?? A minimize Time Series Database, written from scratch as a learning project. 时序数据库(TSDB: Time Series Database)大多数时候都是为了满足监控场景的需求,这里先介绍两个概念:

Jan 3, 2023
Export output from pg_stat_activity and pg_stat_statements from Postgres into a time-series database that supports the Influx Line Protocol (ILP).

pgstat2ilp pgstat2ilp is a command-line program for exporting output from pg_stat_activity and pg_stat_statements (if the extension is installed/enabl

Dec 15, 2021
Open source framework for processing, monitoring, and alerting on time series data

Kapacitor Open source framework for processing, monitoring, and alerting on time series data Installation Kapacitor has two binaries: kapacitor – a CL

Dec 24, 2022
Open Source HTTP Reverse Proxy Cache and Time Series Dashboard Accelerator
Open Source HTTP Reverse Proxy Cache and Time Series Dashboard Accelerator

Trickster is an HTTP reverse proxy/cache for http applications and a dashboard query accelerator for time series databases. Learn more below, and chec

Jan 2, 2023
Time Series Alerting Framework

Bosun Bosun is a time series alerting framework developed by Stack Exchange. Scollector is a metric collection agent. Learn more at bosun.org. Buildin

Dec 27, 2022
A toolkit for replaying time series data.

Replay Toolkit The replay package provides some simple tools for replaying captured data at realtime. I use this in various tools that take logged dat

Aug 13, 2019
Time Series Alerting Framework

Bosun Bosun is a time series alerting framework developed by Stack Exchange. Scollector is a metric collection agent. Learn more at bosun.org. Buildin

Dec 27, 2022
Open source framework for processing, monitoring, and alerting on time series data

Kapacitor Open source framework for processing, monitoring, and alerting on time series data Installation Kapacitor has two binaries: kapacitor – a CL

Dec 26, 2022
tstorage is a lightweight local on-disk storage engine for time-series data
tstorage is a lightweight local on-disk storage engine for time-series data

tstorage is a lightweight local on-disk storage engine for time-series data with a straightforward API. Especially ingestion is massively opt

Jan 1, 2023
Application written in Go which polls Time-series data at specific intervals and saves to persistent storage

TPoller Server Overview The purpose of this application is to poll time-series data per time interval from any (telemetry) application running a gRPC

Feb 10, 2022
Fast time-series data storage server accessible over gRPC

tstorage-server Persistent fast time-series data storage server accessible over gRPC. tstorage-server is lightweight local on-disk storage engine serv

Sep 14, 2022