lightblue-platform / lightblue-rdbms

GNU General Public License v3.0
1 stars 6 forks source link

Coverage Status Stories in Ready

Books!

lightblue

Cloud focused data services with dynamic querying, versioned schemas, and robust security.

lightblue architecture

Why lightblue?

Developing enterprise services for access to data (CRUD) can be deceptively simple. Just write something that gives access to the data you need. Done! The challenge is how do to deal with growth over time and not replicate the data access layer for every component.

Why is it so hard to add a new field?

Can we move our data to MongoDB?

Why is Information Security so concerned with moving to a cloud provider?

Do more with less!

How does lightblue benefit developers?

One of the time sinks for developers is adding new features for clients of their software. To address this for data access, lightblue provides a robust and very capable API, supports a growing number of datastores, and enables changes to data models without impacting existing clients through the use of versioned metadata.

Robust API

The REST API of lightblue is designed to do everything a client could want. There are some key points that the API addresses:

Datastore Agnostic

Clients do not care where data is stored as long as it is available and secure. With lightblue we have controller implementations for:

Not seeing a contoller you need? We welcome new implementations and contributions in general! From opening a request for enhancement to writing code, your ideas and help are greatly appricated.

Versioned Metadata

All data in lightblue is controlled by its metadata. Think of this as all the DDL for a table in a relational database.
A specific version of this metadata provides a view of the stored data. You can have many versions of metadata active at a time, providing different clients with different views of this data. Key points to remember:

<insert example, something simple that anybody can relate to>

How does lightblue benefit operations?

One of the challenges with maintaining enterprise applications is ensuring they are always on. When any change to a data structure requires application deployments it requires operations resources and can require outages to execute. With lightblue any changes to a data structure is simply a change to metadata.

Example workflow to update a single field without lightblue: Slow

Example workflow to update a single field with lightblue: Fast

Some other benefits beyond simply reducing operations overhead are:

What about support and development tools?

If lightblue enables data access across many datasources and technologies we also need to provide tools to support that stack! Enter the management applications:

Lightblue Applications

Each of the applications provides access to the corresponding service layer. The point of them is provide a nicer interface to the service layer without having to deal with the service directly. Each application can be secured independent of the service tier, as noted in the diagram.

How does RDBMS work?

The RDBMSCRUDController (implementation of CRUDController) will be initialized if it is configured to be used to serve the Data. It will handle the lightblue operations which the rest interface provides an external agnostic interface. As the request arrives to this controller, it means that the JSON in the request was already processed, which would call the RDBMSPropertyParserImpl that will transform the RDBMS metadata found in the JSON schema of that specific version to Java objects, used during the processing. The controller will handle the security access, validation if the user can or can not use the operation requested. Then it will use the RDBMSProcessor class to process the request accordingly. The Processor will translate the initial SQL queries used as input using Translator and it will save all the information needed in the RDBMSContext. This way, the Processor will run recursive calls specified in the RDBMS metadata using the initial input to run the operations needed (evaluating conditionals and etc).

See lightblue in action!

License

The license of lightblue is GPLv3. See LICENSE in root of project for the full text.

Dependencies

Dependency Why License
Jackson Java library for processing JSON documents. Use in complicated cases where processing is required on the JSON document. Apache License, Version 2.0
JSONassert Used in unit tests to compare JSON documents before and after processing. Useful for verifying parsing and type conversions (JSON -> Java -> JSON for example) Apache License, Version 2.0
json-schema-validator Validation of JSON documents against a JSON schema. Similar to XML Schema validation. LGPLv3 or later
Flapdoodle Embedded MongoDB In memory MongoDB used in unit tests to test against a real database. Apache License, Version 2.0
mongo-java-driver MongoDB driver for Java. Used for all interactions with MongoDB from Java. Apache License, Version 2.0
hystrix et al. Hystrix core is a java framework to build a Distributed/Cloud-enabled Systems. It's "... is a latency and fault tolerance library designed to isolate points. .., stop cascading failure and enable resilience ...". Apache License, Version 2.0
pyresttest Python utility for testing and benchmarking RESTful services. Apache License, Version 2.0