{"id":19670923,"url":"https://github.com/emc-mongoose/mongoose-base","last_synced_at":"2025-04-29T00:32:14.236Z","repository":{"id":35495079,"uuid":"175399579","full_name":"emc-mongoose/mongoose-base","owner":"emc-mongoose","description":"Mongoose storage performance testing tool - base functionality","archived":false,"fork":false,"pushed_at":"2024-04-23T20:54:03.000Z","size":13488,"stargazers_count":4,"open_issues_count":3,"forks_count":3,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-04-23T22:51:58.280Z","etag":null,"topics":["benchmark","distributed","jsr223","jsr341","performance-testing","scriptable"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/emc-mongoose.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2019-03-13T10:36:44.000Z","updated_at":"2022-09-22T02:22:28.000Z","dependencies_parsed_at":"2024-04-23T21:55:51.681Z","dependency_job_id":"b1e6fd0b-822e-4f6b-b819-e6257d637fdf","html_url":"https://github.com/emc-mongoose/mongoose-base","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emc-mongoose%2Fmongoose-base","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emc-mongoose%2Fmongoose-base/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emc-mongoose%2Fmongoose-base/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emc-mongoose%2Fmongoose-base/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/emc-mongoose","download_url":"https://codeload.github.com/emc-mongoose/mongoose-base/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224142764,"owners_count":17262884,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["benchmark","distributed","jsr223","jsr341","performance-testing","scriptable"],"created_at":"2024-11-11T17:07:31.444Z","updated_at":"2024-11-11T17:07:32.191Z","avatar_url":"https://github.com/emc-mongoose.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Gitter chat](https://badges.gitter.im/emc-mongoose.png)](https://gitter.im/emc-mongoose)\n[![Issue Tracker](https://img.shields.io/badge/Issue-Tracker-red.svg)](https://mongoose-issues.atlassian.net/projects/GOOSE)\n[![CI status](https://gitlab.com/emc-mongoose/mongoose-base/badges/master/pipeline.svg)](https://gitlab.com/emc-mongoose/mongoose-base/commits/master)\n[![Tag](https://img.shields.io/github/tag/emc-mongoose/mongoose-base.svg)](https://github.com/emc-mongoose/mongoose-base/tags)\n[![Maven metadata URL](https://img.shields.io/maven-metadata/v/http/central.maven.org/maven2/com/github/emc-mongoose/mongoose-base/maven-metadata.xml.svg)](http://central.maven.org/maven2/com/github/emc-mongoose/mongoose-base)\n[![Sonatype Nexus (Releases)](https://img.shields.io/nexus/r/http/oss.sonatype.org/com.github.emc-mongoose/mongoose-base.svg)](http://oss.sonatype.org/com.github.emc-mongoose/mongoose-base)\n[![Docker Pulls](https://img.shields.io/docker/pulls/emcmongoose/mongoose-base.svg)](https://hub.docker.com/r/emcmongoose/mongoose-base/)\n\n# Contents\n\n1. [Overview](#1-overview)\n2. [Features](#2-features)\u003cbr/\u003e\n3. [Bundles \u0026 Extenstions](#3-bundles-and-extenstions)\n4. [Get started](doc/getstarted) 🏁 \u003cbr/\u003e\n5. [Comparison With Similar Tools](doc/comparision)\u003cbr/\u003e\n6. [Documentation](doc) 📄 \u003cbr/\u003e\n7. [Contributing](doc/contributing)\u003cbr/\u003e\n8. [Changelog](doc/changelog)\u003cbr/\u003e\n9. [FAQ](doc/faq) ❓ \u003cbr/\u003e\n\n# 1. Overview\n\nMongoose is a distributed storage performance testing tool. This repo contains the basic functionality only. See the \n[extensions](#23-extension) for the actual use. \n\n# 2. Features\n\n## 2.1. Scalability\n\n### 2.1.1. Vertical\n\nUsing [fibers](https://github.com/akurilov/fiber4j) allows to sustain millions of concurrent operations easily without\nsignificant performance degradation.\n\n### 2.1.2. Horizontal\n\nThe [distributed mode](doc/design/modes/distributed_mode) in Mongoose was designed as P2P network. Each peer/node performs\nindependently as much as possible. This eliminates the excess network interaction between the nodes which may be a\nbottleneck.\n\n## 2.2. Customization\n\n### 2.2.1. Flexible Configuration\n\n* Safe: the configuration options are being checked against the schema\n* Extensible: Mongoose's plugins may come up with own configuration options making them available from the joint CLI and being checked against the schema \n* [Expressions](doc/usage/input/configuration#124-expression) allow to specify the dynamically changing values \n\n### 2.2.2. Load Generation Patterns\n\n* CRUD operations and the extensions: Noop, [Copy](doc/design/modes/copy_mode), etc\n\n* [Parial Operations](doc/usage/load/operations/byte_ranges)\n\n* [Composite Operations](doc/usage/load/operations/composite)\n\n* Complex Load Steps\n    * [Pipeline Load](https://github.com/emc-mongoose/mongoose-load-step-pipeline)\n    * [Weighted Load](https://github.com/emc-mongoose/mongoose-load-step-weighted)\n* [Recycle Mode](doc/design/modes/recycle_mode)\n\n* [Data Reentrancy](doc/design/data_reentrancy)\n\n  Allows to validate the data read back from the storage successfully even after the data items have been randomly\n  updated multiple times before\n\n* Custom Payload Data\n\n### 2.2.3. [Scenarios](doc/usage/input/scenarios)\n\nScenarios allow to organize the load steps in the required order and reuse the complex performance tests\n\n### 2.2.4. [Metrics Reporting](doc/usage/output#2-metrics)\n\nThe metrics reported by Mongoose are designed to be most useful for the performance analysis. The following metrics are\navailable:\n\n* Counts\n\n  * Items\n  * Bytes transferred\n  * Time\n    * Effective\n    * Elapsed\n\n* Rates\n\n  * Items per second\n  * Bytes per second\n\n* Timing distributions for:\n\n  * Operation durations\n  * Network latencies\n\n* Actual concurrency\n\n  It's possible to limit the rate and measure the sustained actual concurrency\n\nThe *average* metrics output is being done periodically while a load step is running. The *summary* metrics output is\ndone once when a load step is finished. Also, it's possible to obtain the highest precision metrics (for each operation,\nso called *I/O trace* records).\n\n## 2.3. [Extension](src/main/java/com/emc/mongoose/base/env)\n\nMongoose is designed to be agnostic to the particular extensions implementations. This allows to support any storage,\nscenario language, different load step kinds.\n\n### 2.3.1. Load Steps\n\nThe load step is needed to define how to generate the load (operations type/order/ratio/etc).\nMongoose basically includes the linear load step implementation which may be considered as a straightforward way to \ngenerate a load. Other load step implementations allow to specify some custom and more complex load pattern. See the \nknown load step extensions among the [bundle components](https://github.com/emc-mongoose/mongoose#bundle-contents) \neither among the [additional extensions](https://github.com/emc-mongoose/mongoose#additional-extensions).\n\n### 2.3.2. Storage Drivers\n\nThe storage driver is used by Mongoose to interact with the given storage. It translates the Mongoose's abstract \noperations into the actual I/O requests and executes them. Mongoose basically includes the dummy storage driver only \nwhich does nothing actually and useful only for demo/testing purposes. See the known storage driver extensions among the\n[bundle components](https://github.com/emc-mongoose/mongoose#bundle-contents) either among the \n[additional extensions](https://github.com/emc-mongoose/mongoose#additional-extensions).\n\n### 2.3.3. Scenario Engine\n\nAny Mongoose scenario may be written using any JSR-223 compliant scripting language. Javascript support is available\nout-of-the-box.\n\n# 3. Bundles and Extenstions\n\nThis repo (`mongoose-base`) containts only base functionality. All extentions and additional mongoose tools located into the independent repos and the corresponding components. Each component has its own documentation, CI versioning.\n\n[List of all bundles and extentions](https://github.com/emc-mongoose/mongoose)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femc-mongoose%2Fmongoose-base","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Femc-mongoose%2Fmongoose-base","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femc-mongoose%2Fmongoose-base/lists"}