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.
96 lines
3.1 KiB
Markdown
96 lines
3.1 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
|
|
|
|
- insert
|
|
- single
|
|
- correct data
|
|
- constrain violation
|
|
- batch
|
|
- correct
|
|
- invalids (by hand to check if full transaction will roll back)
|
|
- find
|
|
- by equals (1)
|
|
- integer
|
|
- string
|
|
- date
|
|
- by more X & less Y (N)
|
|
- integer
|
|
- float
|
|
- date
|
|
- update
|
|
- random by id (single)
|
|
- by criteria (batch)
|
|
- delete
|
|
- random by id (single)
|
|
- by criteria (batch)
|
|
|
|
## Documentation analysis
|
|
|
|
- **MyBatis** - out of competitions, due to ass-whipping-xml notation.
|
|
|
|
## Initial project setup analysis
|
|
|
|
- **speedment** - cool-looking streaming API, but it's way of from common SQL-like syntax & failes to work with UUID columns corectly, also they wanna' our money, dude if we need something not straightly mapped. Out of competition.
|
|
- **jOOQ** - enterprise style peace of ..., but still in.
|
|
-
|
|
|
|
- [Apache Cayenne](https://github.com/apache/cayenne)
|
|
- [Ebean](https://github.com/ebean-orm/ebean)
|
|
- [ORMLite Core](https://github.com/j256/ormlite-core)
|
|
- [EclipseLink](https://github.com/eclipse-ee4j/eclipselink)
|
|
- [Querydsl](https://github.com/querydsl/querydsl)
|
|
- [Hibernate](https://github.com/hibernate/hibernate-orm) (as JPA representative - zero mark)
|