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

OSCHINA-MIRROR/cxxjava-CxxDBC

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Guide.md 18 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 29.11.2024 03:02 f871642

CxxDBC使用指南

Версия: 0.1.0
Обновление: 2017/08/30

Содержание

  • Применимые объекты
  • Определение терминов
  • Каталог исходного кода
  • Обзор Client
  • Подробное описание Apps
  • Инструкция по компиляции
  • Другие инструкции
  • FAQ

Применимые объекты

Данное руководство предназначено для IT-специалистов, имеющих знания в области C++ и реляционных баз данных.

Если вы также знакомы с основами JDBC, то интеграция приложения CxxDBC Client будет очень простой; если вы также хорошо знакомы с базовыми знаниями Linux, то интеграция приложения CxxDBC dbproxy mode будет очень простой (требуется развернуть сервер CxxDBC dbproxy).

Определение терминов

  • client: клиент базы данных, который разрабатывает библиотеку для подключения к базе данных. Различные продукты баз данных используют один и тот же API доступа.
  • dbtype: ключевое слово для различения типов баз данных в CxxDBC. В CxxDBC dblib используется для динамической загрузки библиотеки плагинов базы данных и определения местоположения целевой библиотеки соединения client.
  • dblib: плагин базы данных, также называемый драйвером базы данных native driver, который необходимо инкапсулировать отдельно для разных продуктов баз данных. В CxxDBC обычно плагины загружаются динамически.
  • dbproxy: служба прокси базы данных. Когда в CxxDBC используется режим доступа dbproxy proxy, сервер dbproxy server играет ключевую роль.

Каталог исходного кода

CxxDBC --        # корневой каталог
    |- apps      # приложения, разработанные на основе client/dblib
        |- esql          # клиентский инструмент, подобный postgres psql
        |- lite_dbproxy  # упрощённая реализация сервера dbproxy
    |- client    # интегрированная библиотека доступа к базе данных
        |- c             # TODO
        |- cpp           # версия библиотеки C++
        |- java          # TODO
    |- dblib     # коллекция плагинов Native Devier для баз данных
        |- plugins
            |- freetds   # доступ с открытым исходным кодом к Microsoft SQL Server и Sybase
            |- mysql     # реализация плагина MySQL
            |- oracle    # реализация плагина Oracle
            |- postgres  # реализация плагина Postgres
            |- ...       # TODO
    |- interface # определение интерфейса между client и dblib

Обзор Client

Здесь представлен обзор ключевых моментов использования уже реализованного API клиента C++ версии CxxDBC Client.

  • EConnection

    Способ подключения:

    1. URL:
    edbc:[dbtype]://<host:port>/<database>?connectTimeout=<время ожидания соединения, единица измерения: секунды>&socketTimeout=<время ожидания операции с базой данных через сокет, единица измерения: секунды>&clientEncoding=<указать кодировку символов возвращаемых результатов, по умолчанию 'utf-8'>&username=<имя пользователя>&password=<пароль>&ssl=<true|false, является ли соединение безопасным через ssl, действует только в режиме proxy>
    1. Параметры функции: см. определение функции c++:
    virtual void connect(const char *database,
                   const char *host,
                   const int   port,
                   const char *username,
                   const char *password) THROWS(ESQLException);

    Режим доступа:

    1. Статическая компоновка: доступ к фиксированному типу базы данных, подробности см. в разделе «Инструкция по компиляции».

    2. Динамическое прямое подключение: объект EConnection по умолчанию создаётся с использованием режима dbproxy. Конкретный режим определяется параметром конструктора boolean proxy. Когда proxy==false, client использует режим прямого подключения к базе данных, динамически загружая конкретный плагин dblib базы данных на основе dbtype. Например, если dbtype=='MYSQL', client автоматически загрузит MYSQL.so (MYSQL.dll в Windows).

    3. Доступ через прокси: client обращается к базе данных через dbproxy, а dbproxy определяет, к какой базе данных подключаться, на основе client dbtype, аналогично процессу динамической загрузки в режиме динамического прямого подключения.

  • ECommonStatement

    Универсальный объект Statement для доступа к базам данных, поддерживающий все операции SQL (аналогичен объединению функций execute, executeQuery и PreparedStatement в JDBC, более лаконичный API).

  • EUpdateStatement

    Используется только для пакетного обновления SQL-операций, что повышает эффективность выполнения SQL.

  • EConnectionPool

    Пул соединений с базой данных. Получить соединение из объекта EConnectionPool просто с помощью метода getConnection(). Объекты EConnection интеллектуально восстанавливаются после использования.

Подробное описание Apps

Здесь Apps относится к исполняемым программам, которые были скомпилированы для целевой платформы (x64), включая esql и lite_dbproxy.

  • Установка:
    tar zxvf apps/release/cxxdbc_apps_v0.1.0.tar.gz;
    # следующие шаги выполняются только при необходимости включения плагина базы данных Oracle
    cd [целевая платформа, linux или osx];
    cd dblib;
    tar zxvf oracle.tar.zg;
    mv lib oracle;

После распаковки структура каталогов выглядит следующим образом:

apps --        # корневой каталог
  |- certs   # хранит SSL-сертификаты
  |- linux   # программы для платформы Linux
      |- dblib             # набор плагинов баз данных
      |- dbproxy           # основная программа службы dbproxy
      |- dbproxy.ini       # файл конфигурации службы dbproxy
      |- log4e.properties  # конфигурация журнала службы dbproxy
      |- esql              # клиентский инструмент типа psql
  |- osx     # программы для платформы OS X, структура подкаталогов такая же, как у Linux
  • esql: клиентский инструмент, похожий на psql, поддерживает режимы динамического прямого подключения и доступа через прокси.

    Выполнение:

    $ ./esql
    ==============================
    | Name: esql, Version: 0.1.0 |
    | Author: cxxjava@163.com    |
    | https://github.com/cxxjava |
    ==============================
    Usage: ./esql [-c url]
           ./esql [-d] [-v] [?]
    Options:
    -c                 : [-c connect url]
    -d                 : direct connection
    -v                 : show version number
    ?              : list available command line options
    $
    $ ./esql -c "edbc:ORACLE://localhost:6633/xe?username=oracle&password=password"
    ==============================
    | Name: esql, Version: 0.1.0 |
    | Author: cxxjava@163.com    |
    | https://github.com/cxxjava |
    ==============================
    dbtype:ORACLE, version:Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production
    1> select * from oracle001
    2> go **Перевод текста на русский язык:**
    

Примечание:

  1. esql по умолчанию работает в режиме dbproxy-агента, если требуется прямое подключение к базе данных, добавьте параметр -d;
  2. команда go после ввода возвращает sql-оператор, который был введён ранее.

lite_dbproxy — программа доступа к базе данных через прокси-сервер, то есть это серверная служба в режиме прокси-доступа.

Конфигурация:

Файл dbproxy.ini:

#Lite-DBProxy Config File

[COMMON]
max_connections = 100 # Максимальное количество подключений
socket_timeout = 3 # Время ожидания сокета (в секундах)
ssl_cert = "../certs/tests-cert.pem" # Сертификат SSL
ssl_key = "../certs/tests-key.pem"  # Ключ SSL

[SERVICE]
listen_port = 6633 # Порт прослушивания

[SERVICE]
listen_port = 6643 # Порт прослушивания
ssl_active = TRUE # Включить SSL

#[WHITELIST]
# Белый список
# 127.0.0.1

[BLACKLIST]
# Чёрный список
192.168.0.199

[DBTYPE]
MYSQL=true # Поддержка базы данных MySQL: true (включено) | false (выключено)
PGSQL=true # Поддержка PostgreSQL: true (включено) | false (выключено)
ORACLE=true # Поддержка Oracle: true (включено) | false (выключено)
MSSQL=true # Поддержка MSSQL: true (включено) | false (выключено)
SYBASE=true # Поддержка Sybase: true (включено) | false (выключено)

[USERMAP]
postgres=db_postgres,password # Клиентский доступ к пользователю postgres: имя пользователя = db_postgres, пароль = password
mysql=db_mysql,password # Доступ к пользователю mysql: имя пользователя = db_mysql, пароль = password
oracle=db_oracle,password # Доступ к пользователю oracle: имя пользователя = db_oracle, пароль = password
mssql=db_mssql,password # Доступ к пользователю mssql: имя пользователя = db_mssql, пароль = password
sybase=db_sybase,password # Доступ к пользователю sybase: имя пользователя = db_sybase, пароль = password

[DBLIST]
db_postgres = "edbc:PGSQL://localhost:5432/postgres?connectTimeout=30&username=postgres&password=xxx" # Подключение к базе данных postgres
db_mysql = "edbc:MYSQL://localhost:3306/test?connectTimeout=30&username=test&password=xxx" # Подключение к базе данных mysql
db_oracle = "edbc:ORACLE://localhost:1521/xe?connectTimeout=30&username=system&password=xxx" # Подключение к базе данных oracle
db_mssql = "edbc:MSSQL://localhost:1433/master?connectTimeout=30&username=sa&password=xxx" # Подключение к базе данных mssql
db_sybase = "edbc:MSSQL://localhost:5000/master?connectTimeout=30&username=sa&password=xxx" # Подключение к базе данных sybase

Примечание:
1. Если вы включаете ssl_active = TRUE в [SERVICE], ssl_cert и ssl_key становятся обязательными.
2. Чтобы отключить белый список, удалите или закомментируйте весь раздел [WHITELIST]. В противном случае все клиенты будут отклонены.
3. После включения одного из типов баз данных (то есть [DBTYPE] имеет значение true в соответствующей позиции) все соответствующие ссылки в [DBLIST] для этого типа базы данных будут активированы.
4. В режиме прокси-доступа клиентские имена пользователей и пароли CxxDBC должны быть заменены именами пользователей и паролями, указанными в [USERMAP], а не исходными именами пользователей и паролями базы данных.

Файл **log4e.properties**:

Root logger settings

log4j.rootLogger=TRACE, file # Уровень журнала: TRACE, файл log.path = /tmp # Путь к файлу журнала

output to file

log4j.appender.file = org.apache.log4j.RollingFileAppender # Приложение для записи в файл log4j.appender.file.File = ${log.path}/all.log # Файл журнала log4j.appender.file.BufferedIO = false # Буферизация ввода-вывода log4j.appender.file.BufferSize = 8192 # Размер буфера log4j.appender.file.MaxFileSize = 5MB # Максимальный размер файла log4j.appender.file.MaxBackupIndex = 1 # Количество резервных копий log4j.appender.file.layout = org.apache.log4j.PatternLayout # Шаблон макета log4j.appender.file.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %l:%c:%t:%r ] - [ %p ] %X{} %m %T %n # Формат вывода

Примечание: Для получения дополнительной информации о конфигурации см. java-версию log4j.properties.

Выполнение:

$ ./dbproxy
Usage: dbproxy -c [config file]
+d : daemon mode
+c : show cofing sample
+h : show help
+v : show version
$
$ ./dbproxy -c dbproxy.ini
virtual database connecting test...
virtual database [db_oracle] connect success.
listen port: 6633
listen port: 6643

Примечание:

  1. Для запуска в режиме демона добавьте параметр +d.
  2. lite_proxy — это упрощённая версия, и в настоящее время разрабатываются дополнительные функции.

Компиляция:

  1. Статическая линковка клиента: измените значение макроса EDB_CLIENT_STATIC в файле config.hh в папке client/cpp на 1:
/**
 * 功能:edb client 编译模式开关
 * 说明:1-静态链接 | 0-其他模式
 */
#define EDB_CLIENT_STATIC  1

Одновременно добавьте код клиента и соответствующий код базы данных в плагин в основной проект приложения. Например, для статической компоновки плагина mysql добавьте следующие файлы или каталоги в проект приложения:

client/cpp/config.hh client/cpp/Edb.hh client/cpp/src/... dblib/inc/EDatabase.hh dblib/src/EDatabase.cpp dblib/plugins/mysql/EDatabase_mysql.cpp dblib/plugins/mysql/EDatabase_mysql.hh dblib/plugins/mysql/connector/

Обратите внимание, что библиотека коннектора mysql (dblib/plugins/mysql/connector/lib/libmysqlclient.a) должна быть предварительно скомпилирована самостоятельно.

  1. Другие режимы клиента: Измените значение макроса EDB_CLIENT_STATIC в config.hh на 0:
/**
 * 功能:edb client 编译模式开关
 * 说明:1-静态链接 | 0-其他模式,其他模式即为动态直连和代理访问这两种模式,或两种模式的混合。
 */
#define EDB_CLIENT_STATIC  0

Добавьте только код клиента в проект приложения:

client/cpp/config.hh client/cpp/Edb.hh client/cpp/src/...

Другие примечания:

Характеристики кроссплатформенности CxxDBC зависят от характеристик кроссплатформенности исходного клиентского кода библиотеки базы данных, но в большинстве случаев можно найти соответствующую библиотеку для операционной системы на веб-сайте. Среди них:

freetds: http://www.freetds.org/

mysql: https://dev.mysql.com/downloads/connector/c/6.1.html

oracle: http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

postgres: https://www.postgresql.org/ftp/source/

FAQ: TODO.

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

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

1
https://api.gitlife.ru/oschina-mirror/cxxjava-CxxDBC.git
git@api.gitlife.ru:oschina-mirror/cxxjava-CxxDBC.git
oschina-mirror
cxxjava-CxxDBC
cxxjava-CxxDBC
master