|
|
|
@ -11,9 +11,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
- [Apache Cayenne](https://github.com/apache/cayenne)
|
|
|
|
- [Apache Cayenne](https://github.com/apache/cayenne)
|
|
|
|
- [Ebean](https://github.com/ebean-orm/ebean)
|
|
|
|
- [Ebean](https://github.com/ebean-orm/ebean)
|
|
|
|
- [MyBatis](https://github.com/mybatis/mybatis-3)
|
|
|
|
|
|
|
|
- [jOOQ](https://github.com/jOOQ/jOOQ)
|
|
|
|
- [jOOQ](https://github.com/jOOQ/jOOQ)
|
|
|
|
- [speedment](https://github.com/speedment/speedment)
|
|
|
|
- [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)
|
|
|
|
- [Hibernate](https://github.com/hibernate/hibernate-orm) (as JPA representative - zero mark)
|
|
|
|
|
|
|
|
|
|
|
|
## Initial criteria
|
|
|
|
## Initial criteria
|
|
|
|
@ -31,3 +34,47 @@ Good to see if:
|
|
|
|
- "N+1" problem automatic solutions (as much as possible)
|
|
|
|
- "N+1" problem automatic solutions (as much as possible)
|
|
|
|
- ability to generate raw SQL (to be executed elsewhere)
|
|
|
|
- ability to generate raw SQL (to be executed elsewhere)
|
|
|
|
- support for binary (BLOB) storage and extraction (10Mb per record max)
|
|
|
|
- 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.
|
|
|
|
|