Nexus is a Data Distribution System designed for event streaming, dataset access, and value storage. It allows publishers to inform the Nexus server about event streams and datasets, while consumers can request specific data paths.
-
Event Streaming (Kafka)
- Publishers can register event streams with the Nexus server, providing details such as the server address, data structure of events, and the path to publish.
-
Dataset Access
- Users can run scripts to inform the Nexus server about static datasets, including how to access them and their data structure.
-
Value Store/Publishing (Redis)
- Small values can be sent directly to the Nexus server, allowing consumers to retrieve data directly or act as a cache for event streaming.
To run the Nexus server, use the following command:
make run-server
To run the Nexus client, use the following command:
make run-client
You can publish values and datasets using the Nexus client. For example:
./nexus-client publish value /testing/a 123
./nexus-client publish dataset /testing/dataset/a ./tests/example_a.csv
- Single location for all data sharing. Can organize by app, team, user, etc.
- Inspect app internal state
- Build system progress
- Git branches
- Docker container status
- Share data between apps (pub-sub)
- Save queries
- Data versioning
- Save server state to disk and load from disk on startup
- Implement user authentication and authorization
- Improve error handling and logging
- Watch and auto-publish files updates, directories (new files, subdirs), and DBs (new tables)
- Symbolic path links
- i.e. /status/my_app/ -> /my_app/prod/bin/status
- Support functions
- i.e. publish a bash command or binary to a path. When that path is accessed, the command is executed and the output is returned.
- Remote hosting
- Local data storage (Redis)
- Remote data storage (S3, GCS, etc.)
- Documentation for API endpoints
- Implement data filtering
- Implement data transformation
- Implement data compression
- Implement data encryption
- Implement data deduplication
- Seperate out registering and publishing
- Publishing Values
- Int32
- Float64
- String
- Accessing Values
- Int32
- Float64
- String
- Registering Datasets
- Registering individual files
- Registering directories
- Registering datasets from a remote source
- Registering DB tables
- Registering table queries
- Accessing Datasets
- Accessing individual files
- Accessing directories
- Accessing datasets from a remote source
- Accessing DB tables
- Register __ streams
- kafka
- Websocket
- file
- DB
- direct tcp
- Access __ streams
- kafka
- Websocket
- file
- DB
- direct tcp
- Add support for stream filtering
- Minimal navigation and info display
- Type out path
- Command line path argument
- Browse data
- Browse leaf node
- Browse values
- Browse datasets
- Browse individual files
- Browse directories
- Browse DB tables
- Browse streams
- Display data of non-leaf node
- Browse leaf node
- Display data
- Display leaf node
- Display values
- Display datasets
- Display streams
- Display data of non-leaf node
- Display leaf node
- Add method to __ data
- add
- delete
- update
- query
- Add help message with keybindings
- Tab completion if only one child
- Create a web interface for easier interaction
Contributions are welcome! Please open an issue or submit a pull request for any improvements or features you'd like to add.