Modstore Data Requirements
Data Objects / Sources
(Copied from Data Objects / Sources in the README)
A Mod Archive
Manifest
- Name
- Version
- Game Version Compatability
- (Dependencies)
README.md
- Description
- Tags (standardized format?)
-
- Link to issue tracking if any
CHANGELOG.md
- Tertiary assets (In a special folder?)
Database Records
Mod
- Number of downloads
- Ratings (see below)
Mod Rating
- Star Rating? Or just thumbs up/down?
- Rating date
- Rated version of the mod (user has to know?)
- Rating text
- Submitter name (optional)
- Rating Screenshots?
Cross-platform Compilation Service
Cross-platform binary downloadables
Database Solutions
Both Mongo and Postgres offer the same solution, but Postgres affords stronger consistency guarantees. However, if high availability is a concern, then Mongo could be a good choice despite its potential for inconsistency.
Mongo Considerations
Mongo is still "eventually consistent."
This jumps out as a disadvantage to choosing Mongo: "Reads from secondaries can be useful in scenarios where it is acceptable for data to be slightly out of date."
It seems necessary that records for mod dependencies should never be out of date as this could complicate mod downloading/installing. If a request for a group of dependencies for a particular mod yield out of date results, this could impact the performance of the server because it would then have to try again to get a required version of a dependency a second (or more) times.
Postgres Considerations
Is Postgres NoSQL Better Than MongoDB?
TBD
Questions
- How are mod archives stored?
- Do mod archives include its manifest? Tentative yes?
- What (other?) specific data needs to be stored about a mod for the modstore?
- What kind of data consistency guarantees need to be made about mod data and metadata?
Mod Archive Storage
- Will mod archives be stored in something like Amazon's S3 storage?
Amazon's S3 Consistency Model (S3 is eventually consistent)
- Will the app use GitHub's release archive feature for mods available through GitHub?