1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/xiandafu-dao-benchmark

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
README.md 7.5 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 06.03.2025 19:23 e08bb37

dao-benchmark

Описание проекта

Проект предназначен для тестирования производительности различных средств доступа к данным (DAO), таких как JPA, MyBatis, BeetlSQL и других. В рамках этого тестирования проверяются такие операции, как вставка, обновление, выборка данных, пагинация запросов и запросы ORM с целью оптимизации производительности BeetlSQL.

Запуск примера

  • git clone https://gitee.com/xiandafu/dao-benchmark

  • mvn clean package

  • java -jar -Dtest.target=jdbc target/dao-0.0.1-SNAPSHOT.jar, результаты выполнения находятся в директории result

  • Цели тестирования могут быть заменены на jpa, beetlsql, mybatis, jdbc, think, anima, jsqlbox

  • Для просмотра результатов тестирования в директории result следует открыть файлы с результатами

  • Выполнение команды java -jar target/dao-0.0.1-SNAPSHOT.jar beetlsql jsqlbox mybatis jpa открывает браузер и выводит сравнение производительности с помощью графиков echart. Параметры могут быть любым сочетанием целей тестирования или словом all для сравнения всех DAO-инструментов

http://ibeetl.com/pay/ содержит платные видеоуроки по использованию данного тестового приложения

Описание процесса тестирования

Для минимизации влияния базы данных на результаты тестирования используется H2-внутренняя база данных. Конфигурация приведена ниже:

spring:
    datasource:
        driver-class-name: org.h2.Driver
        password: ''
        schema: classpath:db/schema.sql
        url: jdbc:h2:mem:dbtest;DB_CLOSE_ON_EXIT=FALSE
        username: sa
test:
    count: 1000
    target: beetlsql
    warmCount: 20
```mybatis-plus:
  # package with entities, multiple packages separated by a comma or semicolon
  typeAliasesPackage: com.ibeetl.dao.mybatis.entity

beetl:
    suffix: html
beetl-beetlsql:
    dev: false
beetlsql:
    ds:
        dataSource:
            basePackage: com.ibeetl.dao.beetlsql
    multiple:
        dataSource: dataSource

Класс `BeanchmarkApplication` является входной точкой программы, после запуска которой можно начать тестирование или открыть браузер для вывода результатов тестирования с помощью графиков echart.

```java
@Bean
public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
	return args -> {
		if (args.length == 0) {
			test(warmCount, false);
			test(testCount, true);
			logFile(target);
			// After completing the test, the program closes
			System.exit(0);
		} else {
			// Opens browser to display performance comparison
			openExplorer(args);
		}
	};
}

Можно установить количество предварительных запусков и опцию записи логов.

После завершения тестирования каждый метод тестирования автоматически выводится на экран и записывается в файловой системе, расположенный в директории result. Каждый файл содержит следующую информацию:

#jdbc,total=1000 tps:
#Sun Jun 17 19:22:01 CST 2018
testAdd=8695
testExample=0
testOrmQuery=0
testPageQuery=18181
testUpdateById=15873
testUnique=142857

Результат равен 0, что указывает на отсутствие данной функциональности в Dao-инструментах.

Тестовые сценарии* testAdd: Вставка одной записи пользователя в базу данных.

  • testUpdateById: Обновление записи пользователя по первичному ключу.
  • testPageQuery: Постраничная выборка.
  • testUnique: Выборка записи пользователя по первичному ключу.
  • testExample: Выборка с использованием шаблонного класса.
  • testOne2Many: Тестирование отношений, используя Customer и Order для тестирования производительности отношений.### Добавление нового Dao

См. TestServiceConfig, предоставьте реализацию интерфейса TestServiceInterface.

@Configuration
public class DataSourceConfig {

    @Bean
    @ConditionalOnProperty(name = "test.target", havingValue = "beetlsql")
    public TestServiceInterface getBeetlSqlTestService() {
        return new BeetlSqlPerformanceTestService();
    }

    @Bean
    @ConditionalOnProperty(name = "test.target", havingValue = "jpa")
    public TestServiceInterface getJpaTestService() {
        return new JpaPerformanceTestService();
    }
    
}

Скриншоты тестов

Сравнение производительности Dao

  • JDBC используется как эталон, поэтому её производительность самая высокая; если вас интересует этот вопрос, вы можете самостоятельно протестировать JDBC и получить результаты.
  • Некоторые Dao внутри страны не прошли официальное разрешение автора, поэтому результаты тестирования производительности не публикуются. Если вас это интересует, вы можете самостоятельно протестировать и получить результаты.
  • Это версии августа 2021 года, для think и anima новые версии уже не выпускаются, используются версии 2019 года.

Описание результатов тестирования

Результаты показывают, что JDBC значительно превосходит остальные, следом за ней следует BeetlSQL, которая также демонстрирует хорошую производительность. Для полнофункциональных Dao-фреймворков, BeetlSQL является одним из лучших вариантов.

Запланированные задачи* Тестирование EBean

  • Тестирование EclipseLink как реализации JPA
  • Чистое тестирование MyBatis, хотя на практике чистый MyBatis редко используется, но некоторые люди хотят повторно протестировать его.
  • Тестирование JOOQ

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/xiandafu-dao-benchmark.git
git@api.gitlife.ru:oschina-mirror/xiandafu-dao-benchmark.git
oschina-mirror
xiandafu-dao-benchmark
xiandafu-dao-benchmark
master