You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

81 lines
2.4 KiB
Markdown

# Java ORM test
## Initial assumptions
- JPA is f\*\*\*ing slow, due too many layers of abstraction
- NO xml and other shit-styled non-code-like sources must be needed
- no additional tools to work (only boxed with technology set or none is applicable)
<!-- - Current solution does not provide accurated integration path for jWick-kernel (and/or ᛏᚨᛒᛟᚱd-itself) -->
## Initila list of techs
- [Apache Cayenne](https://github.com/apache/cayenne)
- [Ebean](https://github.com/ebean-orm/ebean)
- [jOOQ](https://github.com/jOOQ/jOOQ)
- [speedment](https://github.com/speedment/speedment)
- [ORMLite Core](https://github.com/j256/ormlite-core)
- [EclipseLink](https://github.com/eclipse-ee4j/eclipselink)
- [MyBatis](https://github.com/mybatis/mybatis-3)
- [Querydsl](https://github.com/querydsl/querydsl)
- [Hibernate](https://github.com/hibernate/hibernate-orm) (as JPA representative - zero mark)
## Initial criteria
Must:
- encrypted columns
- no raw SQL for simple CRUD operations
- support for PostgreSQL
Good to see if:
- support for MariaDB
- support extended PostgreSQL features (including json and array)
- "N+1" problem automatic solutions (as much as possible)
- ability to generate raw SQL (to be executed elsewhere)
- support for binary (BLOB) storage and extraction (10Mb per record max)
## Test plan
- postgres version 14 & 14-alpine (test database performance baseline)
- two databases (one with partitioning, one without)
- tables per database
- xxs _[50 records]_
- xs _[500 records]_
- s _[5000 records]_
- m _[50000 records]_
- l _[500000 records]_
- xl _[5000000 records]_
- xxl _[50000000 records]_
- each test module starts a fresh copy of database
- database content is procedure-generated
- random sequences must be pregenerated to be exactly same for all tests (to eliminate test-path diviations)
- random sequence for each test is unique and not intersect (to eliminate postgresql optimizations)
## Requests plan
- search
- random get by id
- find by integer equals
- find by string equals
- find by date equals
- find by integer more X & less Y
- find by float more X & less Y
- find by date after X & before Y
<!-- - update
- random by id
-
- insert
- with correct data
- with unique constrain
- update
- random by id
- by
- delete
- random by id
- by criteria -->
## Documentation analysis
**MyBatis** out of competitions, due to ass-whipping-xml notation.