All Projects â†’ lmangani â†’ gun-cassandra

lmangani / gun-cassandra

Licence: MIT license
Cassandra / Elassandra persistence layer for Gun DB 🔫

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to gun-cassandra

kibana graph
Interactive Network Graph Visualization For Kibana (unmaintained)
Stars: ✭ 38 (+171.43%)
Mutual labels:  gun, gundb
jelass
Janus + Elastic Search + Cassandra docker container with SSL Client Certificates implemented.
Stars: ✭ 13 (-7.14%)
Mutual labels:  cassandra, elassandra
gunstore.io
Store your data in Gun DB by sending simple HTTP requests - based on jsonstore.io 💾 🚀
Stars: ✭ 32 (+128.57%)
Mutual labels:  gun, gundb
gun-scape
GunDB Cytoscape Graph Visualizer + Live Editor
Stars: ✭ 49 (+250%)
Mutual labels:  gun, gundb
docker-elassandra
Docker Image packaging for Elassandra
Stars: ✭ 25 (+78.57%)
Mutual labels:  cassandra, elassandra
crystal-cassandra
A Cassandra driver for Crystal
Stars: ✭ 20 (+42.86%)
Mutual labels:  cassandra, cql
marina
High-Performance Erlang Cassandra CQL Client
Stars: ✭ 50 (+257.14%)
Mutual labels:  cassandra, cql
cassandra-CQL-exporter
A highly configurable utility to export whole Apache Cassandra keyspace or table structure/data to CQL scripts.
Stars: ✭ 19 (+35.71%)
Mutual labels:  cassandra, cql
docker-cassandra-k8s
Cassandra Docker optimized for Kubernetes
Stars: ✭ 13 (-7.14%)
Mutual labels:  cassandra
zeppelin-spark-cassandra-demo
A demo explaining how to use Zeppelin notebook to access Apache Cassandra data via Apache Spark or CQL language
Stars: ✭ 17 (+21.43%)
Mutual labels:  cassandra
engula
Engula is a distributed key-value store, used as a cache, database, and storage engine.
Stars: ✭ 681 (+4764.29%)
Mutual labels:  storage-engine
workshop-intro-to-cassandra
Learn Apache Cassandra fundamentals in this hands-on workshop
Stars: ✭ 208 (+1385.71%)
Mutual labels:  cassandra
cassandra-diagnostics
Cassandra Node Diagnostics Tools
Stars: ✭ 51 (+264.29%)
Mutual labels:  cassandra
cql
Clincal Quality Language Specification
Stars: ✭ 16 (+14.29%)
Mutual labels:  cql
freestyle-cassandra
Freestyle Cassandra
Stars: ✭ 17 (+21.43%)
Mutual labels:  cassandra
microservices-transactions
Choreography-based sagas to maintain data consistency in a microservice architecture.
Stars: ✭ 20 (+42.86%)
Mutual labels:  cassandra
twitter-go
A high throughput, horizontally scalable microservice backend using Go, Cassandra, RabbitMQ, Kubernetes, Helm.
Stars: ✭ 39 (+178.57%)
Mutual labels:  cassandra
rippledb
Embeddable key-value database engine in pure TypeScript, based on LSM-Tree
Stars: ✭ 33 (+135.71%)
Mutual labels:  storage-engine
janusgraph-deployement
A dockerized environment For [JanusGraph + ElasticSearch + Cassandra + GraphExp]
Stars: ✭ 16 (+14.29%)
Mutual labels:  cassandra
cassandra-top
Cassandra top command to monitor cluster without Datastax OpsCenter, and log nodetool administrative commands
Stars: ✭ 13 (-7.14%)
Mutual labels:  cassandra

Gun-Cassandra

CQL/Cassandra native persistence layer for gun

GUN is a realtime, distributed, offline-first, graph database engine.

THIS IS EXPERIMENTAL WORK IN PROGRESS! USE AT YOUR OWN RISK!

Comments and PR/Contributions are super welcome!


Installation

npm install gun-cassandra

Usage

var Gun = require('gun');
require('gun-cassandra');

var gun = Gun({
  file: false // turn off pesky file.js data.json default
  , db: {
	contactPoints: ['127.0.0.1'], 
	keyspace: 'gun'
  }
});

Fluffy's Test

The following script runs Fluffy's test successfully. Speed is ridicolously low when initializing keyspace and table.

GUN -> CQL <- GUN

var cat = {name: "Fluffy", species: "kitty"};
var mark = {boss: cat};
cat.slave = mark;
gun.get('mark').put(mark);
cqlsh> SELECT * FROM gun_db.gun_data;

 soul                 | field   | relation             | state         | value
----------------------+---------+----------------------+---------------+--------
 jccj3klhbH4laGweIBiP |    name |                      | 1515798170328 | Fluffy
                 mark |    boss | jccj3klhbH4laGweIBiP | 1515798170328 |       
 jccj3klhbH4laGweIBiP |   slave |                 mark | 1515798170328 |       
 jccj3klhbH4laGweIBiP | species |                      | 1515798170328 |  kitty

gun.get('mark').get('boss').get('name').val(function(data, key){
  // `val` grabs the data once, no subscriptions.
  console.log("Mark's boss is", data);
});
Output:
Mark's boss is Fluffy

CQL <- GUN

cqlsh> INSERT INTO gun_db.gun_data JSON '{ "soul": "jcdkfchqWeSXR7dzFJdU", "field": "gender", "state": 1515860865492, "relation": "", "value": "male"}';
gun.get('mark').get('boss').get('gender').val(function(data, key){
   console.log("Mark's boss gender is", data);
   process.exit(0);
});
Output:
Mark's boss gender is male
Test Script
# nodejs test/simple.js 
Hello wonderful person! :) Thanks for using GUN, feel free to ask for help on https://gitter.im/amark/gun and ask StackOverflow questions tagged with 'gun'!
> Cassandra Cluster connected!
> Gun-Cassandra Tables Ready!
> waiting 10 seconds...
Mark's boss is Fluffy

## nodejs test/simple-read.js 
Hello wonderful person! :) Thanks for using GUN, feel free to ask for help on https://gitter.im/amark/gun and ask StackOverflow questions tagged with 'gun'!
reading from CQL...
Cassandra Cluster connected!
Gun-Cassandra Tables Ready!
Mark's boss is Fluffy
Boss is a kitty
Cassandra Schema (SimpleStrategy)
cqlsh> DESC KEYSPACE gun_db ;

CREATE KEYSPACE gun_db WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'}  AND durable_writes = true;

CREATE TABLE gun_db.gun_data (
    soul text,
    field text,
    relation text,
    state bigint,
    value text,
    PRIMARY KEY ((soul, field))
) WITH bloom_filter_fp_chance = 0.01
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
    AND comment = ''
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
    AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
    AND crc_check_chance = 1.0
    AND dclocal_read_repair_chance = 0.1
    AND default_time_to_live = 0
    AND gc_grace_seconds = 864000
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair_chance = 0.0
    AND speculative_retry = '99PERCENTILE';


Elassandra Schema (NetworkTopologyStrategy)
cqlsh> ALTER KEYSPACE gun_db WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'DC1' : 1 } AND DURABLE_WRITES = true;
cqlsh> DESC KEYSPACE gun_db ;

CREATE KEYSPACE gun_db WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1': '1'}  AND durable_writes = true;

CREATE TABLE gun_db.gun_data (
    soul text,
    field text,
    relation text,
    state bigint,
    value text,
    PRIMARY KEY ((soul, field))
) WITH bloom_filter_fp_chance = 0.01
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
    AND comment = ''
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
    AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
    AND crc_check_chance = 1.0
    AND dclocal_read_repair_chance = 0.1
    AND default_time_to_live = 0
    AND gc_grace_seconds = 864000
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair_chance = 0.0
    AND speculative_retry = '99PERCENTILE';
CREATE CUSTOM INDEX elastic_gun_data_idx ON gun_db.gun_data () USING 'org.elassandra.index.ExtendedElasticSecondaryIndex';

Changelog

  • 1.0.1 first version for gun 0.9.x based on node-db

TODO

  • Cleanup Gun>Cassandra insert logic
  • Docker Test Builders (Cassandra 3.11, Elassandra 5.5.0.9)
  • Modularize CQL queries (named query in CassanKnex)
  • Stress-Performance Test

Acknowledgement

Gun is open-sourced and copyrighted by Mark Nadal

Apache Cassandra, Apache Lucene, Apache, Lucene, Solr, TinkerPop, and Cassandra are trademarks of the Apache Software Foundation or its subsidiaries in Canada, the United States and/or other countries.

Based on vfs-gun-db by d3x0r

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].