neoism alternatives and similar packages
Based on the "NoSQL Databases" category.
Alternatively, view neoism alternatives based on common mentions on social networks and blogs.
-
gocql
Package gocql implements a fast and robust Cassandra client for the Go programming language. -
qmgo
Qmgo - The Go driver for MongoDB. It‘s based on official mongo-go-driver but easier to use like Mgo. -
mgm
Mongo Go Models (mgm) is a fast and simple MongoDB ODM for Go (based on official Mongo Go Driver) -
redeo
High-performance framework for building redis-protocol compatible TCP servers/services -
go-rejson
Golang client for redislabs' ReJSON module with support for multilple redis clients (redigo, go-redis) -
Kivik
Common interface to CouchDB or CouchDB-like databases for Go and GopherJS -
godscache
An unofficial Google Cloud Platform Go Datastore wrapper that adds caching using memcached. For App Engine Flexible, Compute Engine, Kubernetes Engine, and more. -
rueidis
Fast Redis RESP3 client with auto pipelining and server-assisted client side caching.
WorkOS - The modern identity platform for B2B SaaS
Do you think we are missing an alternative of neoism or a related project?
README
neoism - Neo4j client for Go
Package neoism
is a Go client library providing access to
the Neo4j graph database via its REST API.
Status
System | Status |
---|---|
Travis CI | |
CircleCI | |
Coveralls | |
Codecov |
This driver is fairly complete, and may now be suitable for general use. The code has an extensive set of integration tests, but little real-world testing. YMMV; use in production at your own risk.
Requirements
Go 1.1 or later is required.
Tested against Neo4j 2.2.4 and Go 1.4.1.
Installation
Development
go get -v github.com/jmcvetta/neoism
Stable
Neoism is versioned using gopkg.in
.
Current release is v1
go get gopkg.in/jmcvetta/neoism.v1
Documentation
See GoDoc or Go Walker for automatically generated documentation.
Usage
Connect to Neo4j Database
db, err := neoism.Connect("http://localhost:7474/db/data")
Create a Node
n, err := db.CreateNode(neoism.Props{"name": "Captain Kirk"})
Issue a Cypher Query
// res will be populated with the query results. It must be a slice of structs.
res := []struct {
// `json:` tags matches column names in query
A string `json:"a.name"`
Rel string `json:"type(r)"`
B string `json:"b.name"`
}{}
// cq holds the Cypher query itself (required), any parameters it may have
// (optional), and a pointer to a result object (optional).
cq := neoism.CypherQuery{
// Use backticks for long statements - Cypher is whitespace indifferent
Statement: `
MATCH (a:Person)-[r]->(b)
WHERE a.name = {name}
RETURN a.name, type(r), b.name
`,
Parameters: neoism.Props{"name": "Dr McCoy"},
Result: &res,
}
// Issue the query.
err := db.Cypher(&cq)
// Get the first result.
r := res[0]
Issue Cypher queries with a transaction
tx, err := db.Begin(qs)
if err != nil {
// Handle error
}
cq0 := neoism.CypherQuery{
Statement: `MATCH (a:Account) WHERE a.uuid = {account_id} SET balance = balance + {amount}`,
Parameters: neoism.Props{"uuid": "abc123", amount: 20},
}
err = db.Cypher(&cq0)
if err != nil {
// Handle error
}
cq1 := neoism.CypherQuery{
Statement: `MATCH (a:Account) WHERE a.uuid = {account_id} SET balance = balance + {amount}`,
Parameters: neoism.Props{"uuid": "def456", amount: -20},
}
err = db.Cypher(&cq1)
if err != nil {
// Handle error
}
err := tx.Commit()
if err != nil {
// Handle error
}
Roadmap
Completed:
- Node (create/edit/relate/delete/properties)
- Relationship (create/edit/delete/properties)
- Legacy Indexing (create/edit/delete/add node/remove node/find/query)
- Cypher queries
- Batched Cypher queries
- Transactional endpoint (Neo4j 2.0)
- Node labels (Neo4j 2.0)
- Schema index (Neo4j 2.0)
- Authentication (Neo4j 2.2)
To Do:
- Streaming API support - see Issue #22
Unique Indexes- probably will not expand support for legacy indexing.Automatic Indexes- "- High Availability
- Traversals - May never be supported due to security concerns. From the manual: "The Traversal REST Endpoint executes arbitrary Groovy code under the hood as part of the evaluators definitions. In hosted and open environments, this can constitute a security risk."
- Built-In Graph Algorithms
- Gremlin
Testing
Neoism's test suite respects, but does not require, a NEO4J_URL
environment
variable. By default it assumes Neo4j is running on localhost:7474
, with
username neo4j
and password foobar
.
export NEO4J_URL=http://your_user:[email protected]/db/data/
go test -v .
If you are using a fresh untouched Neo4j instance, you can use the included
set_neo4j_password.sh
script to set the password to that expected by Neoism's
tests:
sh set_neo4j_password.sh
Support
Support and consulting services are available from Silicon Beach Heavy Industries.
Contributing
Contributions in the form of Pull Requests are gladly accepted. Before submitting a PR, please ensure your code passes all tests, and that your changes do not decrease test coverage. I.e. if you add new features also add corresponding new tests.
License
This is Free Software, released under the terms of the GPL v3.
*Note that all licence references and agreements mentioned in the neoism README section above
are relevant to that project's source code only.