MySQLデータの分散時系列データベースであるDolphinDBへの高速移行

DolphinDBは、MySQLデータをインポートするための2つの方法を提供します。ODBCプラグインとMySQLプラグインです。MySQLプラグインを使用してMySQLデータをインポートすることをお勧めします。これは、ODBCインポートよりも高速で6.5Gデータをインポートし、MySQLプラグインはODBCプラグインよりも4倍高速であり、を使用するための構成は必要ありません。 MySQLプラグイン。ODBCプラグインはデータソースを構成する必要があります。

MySQLプラグインを使用する前に、DolphinDBインストールガイドを参照してDolphinDBをインストールしてください。

1.プラグインをダウンロードします

DolphinDBインストールディレクトリ/ server / plugins / mysqlにはすでにMySQLプラグインが含まれており、ユーザーはプラグインを直接使用できます。ユーザーが自分でコンパイルする必要がある場合は、https://github.com/dolphindb/DolphinDBPlugin/blob/master/mysql/README_CN.mdを参照できます

2.プラグインをロードします

GUIで、loadPlugin関数を使用してMySQLプラグインをロードします。

loadPlugin(server_dir+"/plugins/mysql/PluginMySQL.txt")

3.インターフェース機能

DolphinDBのMySQLプラグインは、次のインターフェイス機能を提供します。

  • 接続する
  • showTables
  • extractSchema
  • 負荷
  • loadEx

 

プラグインインターフェイス関数は、次の2つの方法で呼び出すことができます。

(1)moduleName :: apiFunction。たとえば、MySQLプラグインのconnectメソッドを呼び出します。

mysql::connect(host, port, user, password, db)

(2)moduleNameを使用して、インターフェイス関数を直接呼び出します。useステートメントが1回実行される限り、インターフェース関数への後続の呼び出しでuse関数を再実行する必要はありません。したがって、通常はこの呼び出しメソッドをお勧めします。

use mysql
connect(host, port, user, password, db)

 

3.1接続

文法

connect(ホスト、ポート、ユーザー、パスワード、db)

パラメータ

hostは、MySQLサーバーのホスト名です。

portはMySQLサーバーのポート番号であり、デフォルトは3306です。

userは、MySQLサーバーのユーザー名です。

passwordは、ユーザーに対応するパスワードです。

dbはMySQLのデータベース名です。

詳細

MySQL接続を作成し、MySQL接続ハンドルを返します。MySQLユーザーの認証タイプはmysql_native_passwordにすることをお勧めします。

ローカルMySQLサーバーのemployeesデータベースに接続します。

conn=connect("127.0.0.1",3306,"root","123456","employees")

 

3.2 showTables

文法

showTables(接続)

パラメータ

connectionは、connect関数によって返される接続ハンドルです。

詳細

MySQLデータベース内のすべてのテーブルの名前を含むDolphinDBタイプのデータテーブルを返します。

従業員データベースのテーブルを表示します。

showTables(conn);

Tables_in_employees
current_dept_emp
departments
dept_emp
dept_emp_latest_date
dept_manager
employees
salaries
test_datatypes
titles

 

3.2 extractSchema

文法

extractSchema(connection、tableName)

パラメータ

connectionは、connect関数によって返される接続ハンドルです。

tableNameは、MySQLデータベース内のデータテーブルの名前です。

詳細

返される結果は、DolphinDBタイプのテーブルです。最初の列はMySQLデータテーブルのフィールド名、2番目の列はデータがDolphinDBにインポートされた後のデータ型、3番目の列はMySQLのデータ型です。

従業員テーブルの各列のデータ型を表示します。

extractSchema(conn,`employees);

name	        type	  MySQL describe type	
emp_no	        LONG	  int(11)	                
birth_date	DATE	  date	                
first_name	STRING	  varchar(14)	        
last_name	STRING	  varchar(16)	        
gender	        SYMBOL	  enum('M','F')	        
hire_date	DATE	  date	               

3.3負荷

文法

load(connection、table | query、[schema]、[startRow]、[rowNum])

パラメータ

connectionは、connect関数によって返される接続ハンドルです。

tableは、MySQLサーバー内のテーブルの名前です。

queryは、MySQLのクエリステートメントです。

スキーマはDolphinDBタイプのテーブルであり、2つの列が含まれています。最初の列はフィールド名で、2番目の列はデータ型です。これはオプションのパラメーターです。ユーザーは、このパラメーターを指定することにより、DolphinDBにデータをロードするときにデータ型を変更できます。

startRowは正の整数であり、読み取るデータの開始行番号を示します。これはオプションのパラメーターであり、デフォルト値は0です。これは、最初のレコードからデータの読み取りを開始することを意味します。

rowNumは正の整数であり、読み取られたレコードの行数を示します。これはオプションのパラメーターであり、指定されていない場合は、すべてのデータを読み取ることを意味します。2番目のパラメーターがqueryの場合、startRowパラメーターとrowNumパラメーターは無効です。

詳細

MySQLデータをDolphinDBのメモリテーブルにロードします。

  1. 従業員テーブルのすべてのデータをDolphinDBのメモリテーブルにロードします。
t=load(conn,"employees");

emp_no	birth_date	first_name	last_name	gender	hire_date
10,001	1953.09.02	Georgi	        Facello	        M	1986.06.26
10,002	1964.06.02	Bezalel	        Simmel	        F	1985.11.21
10,003	1959.12.03	Parto	        Bamford	        M	1986.08.28
10,004	1954.05.01	Chirstian	Koblick	        M	1986.12.01
10,005	1955.01.21	Kyoichi	        Maliniak	M	1989.09.12
10,006	1953.04.20	Anneke	        Preusig	        F	1989.06.02
10,007	1957.05.23	Tzvetan	        Zielinski	F	1989.02.10
10,008	1958.02.19	Saniya	        Kalloufi	M	1994.09.15
10,009	1952.04.19	Sumant	        Peac	        F	1985.02.18
10,010	1963.06.01	Duangkaew	Piveteau	F	1989.08.24
...

2.employeesテーブルの最初の10行のデータをDolphinDBメモリテーブルにロードします。

t=load(conn,"select * from employees limit 10");

emp_no	birth_date	first_name	last_name	gender	hire_date
10,001	1953.09.02	Georgi	        Facello	        M	1986.06.26
10,002	1964.06.02	Bezalel	        Simmel	        F	1985.11.21
10,003	1959.12.03	Parto	        Bamford	        M	1986.08.28
10,004	1954.05.01	Chirstian	Koblick	        M	1986.12.01
10,005	1955.01.21	Kyoichi	        Maliniak	M	1989.09.12
10,006	1953.04.20	Anneke	        Preusig	        F	1989.06.02
10,007	1957.05.23	Tzvetan	        Zielinski	F	1989.02.10
10,008	1958.02.19	Saniya	        Kalloufi	M	1994.09.15
10,009	1952.04.19	Sumant	        Peac	        F	1985.02.18
10,010	1963.06.01	Duangkaew	Piveteau	F	1989.08.24

3.ロード時にlast_nameのデータ型をSYMBOLに変更します。

schema=select name,type from extractSchema(conn,`employees)
update schema set type="SYMBOL" where name="last_name"
t=load(conn,"employees",schema)
//查看表t的结构
schema(t);

chunkPath->
partitionColumnIndex->-1
colDefs->
name       typeString typeInt
---------- ---------- -------
emp_no     LONG       5      
birth_date DATE       6      
first_name STRING     18     
last_name  SYMBOL     18
gender     SYMBOL     17     
hire_date  DATE       6      

3.4 loadEx

文法

loadEx(connection、dbHandle、tableName、partitionColumns、table | query、[schema]、[startRow]、[rowNum])

パラメータ

connectionは、connect関数によって返される接続ハンドルです。

dbHandleは、DolphinDBのデータベースハンドルであり、通常はデータベース関数によって返されるオブジェクトです。

tableNameは、DolphinDBデータベース内のテーブルの名前です。

partitionColumnsは、パーティション列を表す文字列スカラーまたはベクトルです。

tableは、MySQLサーバー内のテーブルの名前を表す文字列です。

queryは、MySQLのクエリステートメントです。

スキーマはDolphinDBタイプのテーブルであり、2つの列が含まれています。最初の列はフィールド名で、2番目の列はデータ型です。これはオプションのパラメーターです。ユーザーは、このパラメーターを指定することにより、DolphinDBにデータをロードするときにデータ型を変更できます。

startRowは正の整数であり、読み取るデータの開始行番号を示します。これはオプションのパラメーターであり、デフォルト値は0です。これは、最初のレコードからデータの読み取りを開始することを意味します。

rowNumは正の整数であり、読み取られたレコードの行数を示します。これはオプションのパラメーターであり、指定されていない場合は、すべてのデータを読み取ることを意味します。2番目のパラメーターがqueryの場合、startRowパラメーターとrowNumパラメーターは無効です。

詳細

MySQLのデータをDolphinDBのパーティションテーブルにロードします。loadExは、DolphinDBのシーケンシャルパーティションテーブルへのデータのロードをサポートしていません。

DolphinDBのディスクVALUEパーティションテーブルにemployeesテーブルをロードします。

db=database("H:/DolphinDB/Data/mysql",VALUE,`F`M)
pt=loadEx(conn,db,"pt","gender","employees")
select count(*) from loadTable(db,"pt");

count
300,024

データをメモリパーティションテーブルにロードする必要がある場合は、データベースパスを空の文字列に変更するだけです。分散テーブルにデータをロードする必要がある場合は、データベースパスを「」で始まるパスに変更するだけです。 dfs:// "、たとえば、" dfs:// mysql "。分散テーブルはクラスターで使用する必要があります。クラスターの展開については、シングルサーバークラスターの展開マルチサーバークラスターの展開を参照してください

4.データ型変換

MySQLプラグインを使用してDolphinDBにデータをインポートすると、対応する型変換が行われます。特定の変換ルールを次の表に示します。

説明:

(1)DolphinDBの整数型(SHORT、INT、LONG)はすべて符号付きです。オーバーフローを防ぐために、MySQLの符号なし型はDolphinDBの上位符号型に変換されます。たとえば、unsigned tinyintはshortに変換され、unsignedsmallintはshortに変換されます。現在、MySQLプラグインは64ビットの符号なし型変換をサポートしていません。

(2)DolphinDBでは、整数の最小値はNULLを表します。CHARタイプの-128、SHORTタイプの-32,768、INTタイプの-2,147,483,648、およびLONGタイプの-9,223,372,036,854,775,808はすべてNULLを表します。

(3)MySQLのbigint unsigned型の場合、デフォルトでLONG型のDolphinDBに変換されます。オーバーフローが発生した場合、ユーザーはスキーマパラメータを使用し、タイプをDOUBLEまたはFLOATとして指定する必要があります。

(4)MySQLのchar型とvarchar型は、長さが10以下の場合、DolphinDBのSYMBOL型に変換され、長さが10より大きい場合、STRING型に変換されます。 DolphinDB。SYMBOLタイプはDolphinDB内に整数として格納されるため、データの並べ替えと比較の効率が高くなり、ストレージスペースを節約することもできます。ただし、文字列を整数にマップするには時間がかかり、マッピングテーブルもメモリを消費します。ユーザーは、次のルールに従って、列がSYMBOLタイプを使用するかどうかを決定できます。フィールドの値が多数繰り返される場合は、SYMBOLタイプを使用します。たとえば、財務データの銘柄コード、取引所、契約コード、およびIoTデータのデバイス番号はすべて、SYMBOLを使用する一般的なシナリオです。

5.パフォーマンステスト

通常のPC(16Gメモリ、4コア、8スレッド、SSDを使用)でパフォーマンステストを実施しました。使用したデータセットは、1990年から2016年までの米国株式市場の日次見積もりデータです。データ量は6.5Gで、22フィールド、50,591,907行のレコードが含まれ、MySQLデータベースのディスク使用量は7.2Gです。loadEx関数を使用してMySQLからDolphinDBのパーティションデータベースにデータをインポートするのにかかる時間はわずか160.5秒で、読み取り速度は41.4M / sに達し、DolphinDBデータベースのディスク使用量は1.3Gでした。同じPCで、ODBCを使用して一度にデータをインポートすると、MySQLメモリが不足するため、毎回100万個のデータをインポートするのに660秒かかります。同じデータをクリックハウスにインポートするのに171.9秒かかり、読み取り速度は37.8M / sでした。DolphinDBは、時系列データ処理とパーティション管理においてクリックハウスよりも便利です。パフォーマンスを確保し、同時に時系列データと分散データベースのさまざまな処理をサポートしたい場合は、DolphinDBが最適です。

おすすめ

転載: blog.csdn.net/qq_41996852/article/details/110850701
おすすめ