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.
 
 
Edward M. Kagan 5d7f37f49a Article research started 4 years ago
.vscode Auto redeploy & recompile for vert.x 4.X 4 years ago
docker Drop 101 - initial projet setup tests for Jooq & Speedment. 4 years ago
modules Drop 101 - initial projet setup tests for Jooq & Speedment. 4 years ago
sql Drop 101 - initial projet setup tests for Jooq & Speedment. 4 years ago
.gitignore Auto redeploy & recompile for vert.x 4.X 4 years ago
pom.xml Drop 101 - initial projet setup tests for Jooq & Speedment. 4 years ago
readme.md Article research started 4 years ago
sources.md Initial textual assumptions 4 years ago
workspace.code-workspace Auto redeploy & recompile for vert.x 4.X 4 years ago

readme.md

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)

Initila list of techs

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.

Article cross analysis

Sources:

Tools:

Honorable mentioning

  • EJB 4.0 (now stands for Jakarta Enterprise Beans) is supported only in GlassFish 6 which is a part of Eclipse Foundation family. It's not included in research due to high binding to one particular implimentation with low chance of change in future.
  • EOF (Enterprise Objects Framework) is a part of Apple now (originaly designed in NeXT). It supports java from back in a days, but now it's obsolete as of April 2005 (rise of Objective-C and Mac OS Tiger Intel-epoch)
  • Oracle Kodo - JPA-based framework from Oracle, does not compete due to Oracle involvment and price tag.
  • Oracle TopLink - part of Oracles' Fusion Middleware, was donated to Eclipse Foundation in 2007, and renamed to EclipseLink, so TopLink is obsolete now.