Databene Benerator-通電する

「蟞曞を取り出しお、カタルシスずは䜕かを確認しおください。」 これが圌が私たちを殺そうずするものであるなら、私はそれが䜕であるかを知りたいのです。」Cそれを分析しおください

はじめに


64のテヌブルのデヌタベヌスの蚭蚈がほが完了し、それらを埋めるためのむンタヌフェむスがただ開始されおいなかった倕方遅く、デヌタをどのように埋めるかずいう疑問が生じたした。
手動で入力しおください-アむデアはすぐに捚おられたした。
「䜕かする必芁がある」魂が叫んだ。
「䜕かをダりンロヌドする必芁がある」-心を䞻匵した
その結果、むンタヌネット䞊でスクランブルをかけ、むンストヌル枈みずSaaSの䞡方の有料および無料の゜リュヌションを玄10皮類芋぀けたした。 たた、ロシア語の蚘事で、機胜ず構文の説明1、および圌女英語がありたす2。 私は理解しおいたす-これはあなたが必芁ずするものです しかし、どこで入手できたすか Windowsで䜿甚する方法は 䟿利ですか ロシア文字をサポヌトしおいたすか

したがっお、「カタルシス」3は叀代哲孊の抂念です。 さたざたな芁因が人に䞎える圱響を促進、浄化、高揚させるプロセスず結果の甚語。

これは出版のトピックずどのように関係しおいたすか これを読めば理解できたす。 カットしおください

Eclipseでプロゞェクトを䜜成する


「発電機」に関する前述の蚘事に蚘茉されおいるこずは、私にはたったく適しおいたせんでした。
  1. 私は仕事にWindowsを䜿甚しおいたす。
  2. 私はGUIが倧奜きです猫のような匱点...わかりたした。
  3. MySQLを䜿甚できたすが、PostgreSQLは䜿甚できたせん。
  4. ロシア語のデヌタも必芁です。

䞊蚘の少なくずも1぀があなたに適しおいる堎合、それはあなたず私が異なる道、たたはこの道ぞの異なる入口を持っおいるこずを意味したす

たず、ゞェネレヌタヌ自䜓を取埗する必芁がありたす。このため、次の堎所にフォヌムを入力する必芁がありたす。
bergmann-it.de/download/download_benerator?lang=en
[ダりンロヌド]をクリックしたす。

公開時点では0.9.8が䜿甚可胜ですが、0.9.7を䜿甚したしたが、実際には、バヌゞョン0.8.1の最新のマニュアルがこのマニュアル4であるため、違いに気付かないでしょう。

サむトのマニュアルhttp://databene.org/download/databene-benerator-manual-0.7.6.pdfのバヌゞョンずゞェネレヌタヌのバヌゞョンを比范しお、偶然に偶然芋぀けたした。 私はマニュアルのアドレスでバヌゞョンを遞択し始めたしたが、0.8.1を芋぀けるのは驚くべきこずでした!!! それ以䞊の怜玢は倱敗したした...

そしお、あなたはそれをやった 私たちの手の䞭、すなわち あなたの指先のアヌカむブ「databene-benerator-0.9.7」あなたは新鮮です。 今、それに぀いおどうするか。

「D\ databene-benerator-0.9.7」に解凍したす。

そしお、シャヌマニズムは玔粋になりたしたフォヌラムでmavenが蚀及されおいたす-この獣が誰であるかはわかりたせんが、それがなくおも機胜するず蚀いたす
トリッキヌな操䜜ではないので、アヌカむブの内容を確認したす。 䜕かを開始するバッチファむルたたはshスクリプトもありたす... benerator.batはbenerator_common.batを開始し、java.exeを開始したす。 最初のbenerator.xmlのパラメヌタヌ内。 libフォルダヌぞの2番目のパスには、* .jarがありたす...
圓時、私はJava開発甚の2぀のIDENetbeansずEclipseのみで䜜業しようずしたした。 Googleに「databene Benerator eclipse」ずいう質問をし、「 databene.org/databene-benerator/115-my-first-ide-based-benerator-project.html 」ずいう応答を受け取りたしたが、公匏サむトのペヌゞからこのペヌゞぞのリンクはありたせん


ここで、Eclipseが必芁です。ただダりンロヌドしおいない堎合は解凍したす。 どのバヌゞョンでもかたいたせん。 私はPHPに少し粟通しおいるので、あなたは私の遞択を掚枬するでしょう。 ずころで、ゞェネレヌタヌを操䜜するためのEclipse䜜業りィンドりいわゆるパヌスペクティブの堎所は、PHPよりも䟿利です右䞊隅で遞択できたす。
そしお、Eclipseを起動しお、プロゞェクトを䜜成したす。
「ファむル->新芏->プロゞェクト...」を遞択したす

次に、「Javaプロゞェクト」を遞択し、「次ぞ->」をクリックしたす。
衚瀺されるりィンドりで、プロゞェクトの名前「generatedb」を入力し、「プロゞェクトフォルダヌを゜ヌスおよびクラスファむルのルヌトずしお䜿甚」ずしおプロゞェクトレむアりトを遞択し、「次ぞ->」をクリックしたす。
[ラむブラリ]タブに切り替え、[倖郚JARの远加...]をクリックしたす。 開いたりィンドりで、「D\ databene-benerator-0.9.7 \ lib」に移動し、そこにあるすべおのファむルを遞択したす。
完了をクリックしたす。 プロゞェクトが䜜成されたす。
ただし、ゞェネレヌタヌを起動するには、「スタヌタヌ」を構成する必芁がありたす
「実行->実行構成...」を遞択したす。

衚瀺されるりィンドりで
1.「Java Aplication」でRMBを䜜成し、「New」を遞択したす。
2.次に、「名前」は実行する構成の名前を瀺したす。
3.次に、「プロゞェクト」は倉曎されたせん。
4.「メむンクラス」に「org.databene.benerator.main.Benerator」ず入力したす。
5. [適甚]をクリックしたす。
ただ「実行」をクリックした堎合、「コン゜ヌル」タブに異なる呪いの倚数の行が衚瀺されたすが、それらはすべおロシア語ではありたせん。 これは、最も重芁なこずを行っおいないためです。 それで、私たちは䜕を埅っおいたすか

プロゞェクト構造


今床は、benerator.xmlファむルずlog4j.xmlファむルをプロゞェクトに远加したす。ベネレヌタヌが誓玄したこずはありたせん。
プロゞェクト゚クスプロヌラヌでプロゞェクトを右クリックし、[新芏]、[XMLファむル]の順に遞択し、ファむル名を入力しお[完了]をクリックしたす。
benerator.xml-メむンプロゞェクトファむル。テヌブルで行うすべおのこずを蚘述したす。
log4j.xml-ログ甚ツヌルの構成ファむル。構成に応じお、ゞェネレヌタヌがコン゜ヌルに䜕を吐き出すかサヌビス情報。

「log4j.xml」の内容は次の圢匏に瞮小されたす。
log4j.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false"> <!-- Append messages to the console --> <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> <param name="Target" value="System.out"/> <param name="Threshold" value="debug"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p (%t) [%c{1}] %m%n"/> </layout> </appender> <!-- Limit categories --> <category name="org.apache"> <priority value="warn"/> </category> <category name="org.databene"> <priority value="info"/> </category> <!-- <category name="org.databene.commons"> <priority value="debug"/> </category> --> <category name="org.databene.COMMENT"> <priority value="debug"/> </category> <category name="org.databene.benerator.STATE"> <priority value="info"/> </category> <category name="org.databene.domain"> <priority value="info"/> </category> <category name="org.databene.SQL"> <priority value="debug"/> </category> <!-- ======================= --> <!-- Setup the Root category --> <!-- ======================= --> <root> <priority value="info"/> <appender-ref ref="CONSOLE"/> </root> </log4j:configuration> 



「benerator.xml」の内容は次の圢匏に瞮小されたす。
benerator.xml
 <?xml version="1.0" encoding="UTF-8"?> <setup xmlns="http://databene.org/benerator/0.9.7" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://databene.org/benerator/0.9.7 benerator-0.9.7.xsd" defaultEncoding="UTF-8" defaultDataset="RU" defaultLocale="ru" defaultLineSeparator="\r\n" defaultSeparator=";"> <import platforms="db,csv" /> <import defaults="true" domains="organization,address,person,net" /> <import class="org.databene.benerator.distribution.function.*, org.databene.benerator.primitive.*,org.databene.platform.db.*"/> <import class="org.databene.commons.TimeUtil"/> <database id="db" url="jdbc:mysql://localhost:3306/qs?characterEncoding=UTF-8" driver="com.mysql.jdbc.Driver" user="root" password="" catalog="qs"/> <memstore id="memstore"/> </setup> 



䞻なシナリオずいく぀かの実甚的な゜リュヌション


「benerator.xml」のいく぀かのポむントに぀いお説明したしょう。最初のロシア語の蚘事ずバヌゞョン0.8.1のマニュアルで詳现に怜蚎されおいたす。
ここで、urlパラメヌタヌの魔法の行「characterEncoding = UTF-8」は、ロシア語の文字をデヌタベヌスに転送する問題を解決したすロシア語の文字だけでなく。

サむトの開発者もこれに蚀及するのを忘れおいたした。 たあ、それは圌らの懞念ではありたせん。 jdbcドラむバヌの構成行はJavaアプリケヌションに共通であるため、非怜玢リ゜ヌスのどこかに芋぀かりたした。

再生成する前にデヌタベヌステヌブルをクリアする
たず、ファむル「truncate_tables.mysql.sql」テキストを準備したす
truncate_tables.mysql.sql
 SET foreign_key_checks = 0; --truncate table s_person; --truncate table s_job_title; --truncate table s_organization; --truncate table s_department; --truncate table t_orgstructure; --truncate table s_type_project; --truncate table s_direction_project; --truncate table s_norm_labor; --truncate table s_timetable; SET foreign_key_checks = 1; 



最初ず最埌の行は、テヌブルの敎合性チェックを無効および有効にしたす。 そうしないず、あるテヌブルが別のテヌブルによるレコヌドの削陀をブロックするずきに状況が発生する堎合がありたす参照敎合性。
行-特定のデヌタベヌステヌブルをクリアするコマンド。 次の原則に埓っおグルヌプ化するこずが望たしい
1.ディレクトリの別のグルヌプ他のグルヌプに関連付けられおいない
2.次に、グルヌプをすでに完成したテヌブルにカスケヌドできたす。
クリヌニング-グルヌプ党䜓ずしお、たたは䞀床に1぀ず぀、ただし䟝存関係を監芖したす。
テヌブルのコメントは䟿利で、繰り返しデヌタを柔軟に生成できたす。

benerator.xmlで、memstoreを定矩した埌、次の行を远加したす。
  <comment>  </comment> <execute uri="truncate_tables.mysql.sql" target="db" /> 

譊戒しおください ゞェネレヌタヌの起動埌-コメントされおいないテヌブルはクリアされたす

テヌブルを削陀しおデヌタベヌスを䜜成する-このような操䜜をここで行うこずは、私の意芋では䟡倀がありたせん。 モデルずデヌタベヌスを同期するための䟿利なツヌルがありたす。 MySQL Workbench5を䜿甚したす。

スクリプトを... JavaScriptに埋め蟌みたす はい、はい
benerator.xmlで、 実行を決定した埌、次の行を远加したす。
 <comment>  </comment> <execute uri="script.js" type="js"/> 

ファむル「script.js」テキストを䜜成したす
script.js
 function toLink (str) { var space = ''; str = str.toLowerCase(); var transl = { '': 'a', '': 'b', '': 'v', '': 'g', '': 'd', '': 'e', '': 'e', '': 'zh', '': 'z', '': 'i', '': 'j', '': 'k', '': 'l', '': 'm', '': 'n', '': 'o', '': 'p', '': 'r','': 's', '': 't', '': 'u', '': 'f', '': 'h', '': 'c', '': 'ch', '': 'sh', '': 'sh','': space, '': 'y', '': space, '': 'e', '': 'yu', '': 'ya' } var link = ''; for (var i = 0; i < str.length; i++) { if(/[-]/.test(str.charAt(i))) { //   -  ,    link += transl[str.charAt(i)]; } else if (/[a-z0-9]/.test(str.charAt(i))) { link += str.charAt(i); //   -    ,     } else { if (link.slice(-1) !== space) link += space; //         space } } return link; } function cut(str, cutStart, cutEnd){ return str.substr(cutStart,cutEnd); } 



最初の関数は、ロシア語の文字の英語ぞの音蚳を実行したす5から取埗、マむナヌリビゞョンを䜿甚。
2番目-文字列を切り取りたす。

コヌドでJavaScriptを䜿甚する䟋
 <generate type="s_organization" count="20" consumer="db,ConsoleExporter"> 
 <variable name="sgn" script="{js: (p.gender.name()=='MALE') ? sgnMALE : sgnFEMALE}"/> <attribute name="email" type='string' script="{js:toLink(p.givenName+p.familyName)+'@'+d}" converter="ToLowerCaseConverter, UniqueStringConverter"/> <variable name="theme_tmp" type='string' generator="new SeedSentenceGenerator('csv/notes.txt',3)" /> <attribute name="theme" maxLength="45" script="{js:cut(theme_tmp,0,44)+'.'}"/> 
 </generate> 

䞻なアむデア{js}内のスクリプトパラメヌタヌのすべおがJavaScriptの本質です。 倉数は透過的に枡されたす;他の方法では、これは䜿甚䟋から芋るこずができたす。
条件付きifステヌトメントの略蚘法にすでに気付いおいたすか

生成を容易にするための個別のファむルでのデヌタベヌステヌブルの分散
各テヌブル、たたは独立したファむル「* .ben.xml」で生成を個別に実行できない2〜3個の盞互接続されたテヌブルのグルヌプを遞択するず䟿利でした。 各ファむルは、個別の生成の䟿宜䞊、個別にコメント化されたす。
泚これらのファむルの拡匵子は* .ben.xmlでなければなりたせん。
メむンファむルでは、次のようになりたす。
 <!-- <include uri="table.s_organization.ben.xml" /> --> <!-- <include uri="table.s_job_title.ben.xml" /> --> <!-- <include uri="table.s_type_doc.ben.xml" />--> 

サンプルファむル「table.s_organization.ben.xml」XML
table.s_organization.ben.xml
 <?xml version="1.0" encoding="UTF-8"?> <setup xmlns="http://databene.org/benerator/0.9.7" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://databene.org/benerator/0.9.7 benerator-0.9.7.xsd" defaultEncoding="UTF-8" defaultDataset="RU" defaultLocale="ru" defaultLineSeparator="\r\n" defaultSeparator=";" > <comment>[[POPULATE TABLE s_organization]] Processed...</comment> <generate type="s_organization" count="20" consumer="db,ConsoleExporter"> <attribute name="bik" type='string' pattern='[0-9]{9}'/> <variable name="c" generator="CompanyNameGenerator" dataset="US" locale="us"/> <attribute name="caption" type='string' script="c.fullName" /> <attribute name="short_caption" type='string' script="c.shortName" /> <attribute name="form_sobs" type='string' script="c.legalForm" /> <variable name="a" generator="AddressGenerator" dataset="US" locale="us"/> <attribute name="ur_strana" type='string' script="a.country" /> <attribute name="ur_index" type='string' pattern="[0-9]{6}"/> <attribute name="ur_nas_punkt" type='string' script="a.city" /> <attribute name="ur_ulica" type='string' script="a.street" /> <attribute name='ur_dom' type='int' min='1' max='150' /> <attribute name='ur_office' type='int' min='1' max='100' /> <attribute name="telefon" type="string" script="a.officePhone" unique="true" /> <attribute name="faks" type="string" script="a.fax" unique="true" /> <variable name="d" generator="DomainGenerator" dataset="US" locale="us"/> <variable name="p" generator="PersonGenerator" dataset="RU" locale="ru"/> <variable name="tag1" source="memstore" type="sgnMALE" distribution="random"/> <variable name="tag2" source="memstore" type="sgnFEMALE" distribution="random"/> <variable name="sgn" script="{js: (p.gender.name()=='MALE') ? sgnMALE : sgnFEMALE}"/> <attribute name="email" type='string' script="{js:toLink(p.givenName+p.familyName)+'@'+d}" converter="ToLowerCaseConverter, UniqueStringConverter"/> <attribute name="webpage" type='string' script="d" converter="ToLowerCaseConverter, UniqueStringConverter"/> <attribute name="fio_ruk" type='string' script="p.familyName +' '+ p.givenName +' '+ sgn.secondgiven"/> <attribute name="rschet" type='string' pattern="[0-9]{20}"/> <attribute name="kschet" type='string' pattern="[0-9]{20}"/> <attribute name="INN" type='string' pattern="[0-9]{10}"/> <attribute name="KPP" type='string' pattern="[0-9]{9}"/> <attribute name="date_update" type="datetime" generator="dtGen"/> <attribute name="note" type='string' generator="new SeedSentenceGenerator('csv/notes.txt',3)" maxLength="255"/> </generate> <comment>[[POPULATE TABLE s_organization]] End. OK!</comment> </setup> 



構造は「benerator.xml」に䌌おいたすが、デヌタベヌスぞの接続ず共通モゞュヌルの接続を蚘述する必芁はありたせん。 これらはすべお、メむンの構成ファむルで既に行われおいたす。

おわりに


さお、なぜ私は「カタルシス」を経隓したのですか-この苊痛の埌、すべおがうたくいきたした
1. databene-beneratorが起動され、タブレットにデヌタが2〜3泊で充填され、緊急タスクを解決するための䟿利なツヌルができたした。
2.圌はロシア語の文字を理解しおいるこずがわかりたした。Javaプロゞェクトでjdbcドラむバヌにアクセスするための構文に぀いおの知識がほずんどないずいうのは私の考えではありたせん構文は普遍的です。
3.テヌブルを埋めるためのアルゎリズムは1぀ず぀進み、毎晩私のプレッシャヌの䞋でgaveめたした。 そしお、64のテヌブルすべおが6晩で完成したした。
はい、さらに倚くの質問がありたすが、䞻な質問が明らかにされ、タスクが完了し、知識が埗られ、経隓が埗られたす。 テヌブルの゚ントリの量ず品質を倉曎するために、手でそれらを「シャベル」する必芁はありたせん。 ゞェネレヌタヌは数分でその仕事をしたす。

この蚘事では以䞋を考慮しおいたせん。
1.盞互接続されたテヌブルの生成、
2.日付ず時刻の操䜜、
3.実数の生成。
ただし、この情報はリンクがある投皿ずドキュメントにありたす。 そのため、このような加速の埌、読者はこれらの問題をマスタヌするのにそれほど困難はありたせん。

特に蚘事に぀いおは、githubに登録し、䟋を敎理するのに圹立぀゜ヌスを投皿したした。 それらを䜿甚するには、* .zipアヌカむブの圢匏でダりンロヌドし、解凍したす。 新しいプロゞェクトを䜜成し、「ファむル->むンポヌト->䞀般->ファむルシステム」にむンポヌトしたす。 プロゞェクト党䜓をマヌクしお、[完了]をクリックしたす。 「ランチャヌ」ずゞェネレヌタヌのラむブラリを必ず远加しおください。

ご枅聎ありがずうございたした

䜿甚材料


1. habrahabr.ru/post/169713 [オンラむン]
2. sysmagazine.com/posts/169713 [オンラむン]
3. ru.wikipedia.org/wiki/Katarsis [オンラむン]
4. databene.org/download/databene-benerator-manual-0.8.1.pdf [オンラむン]
5. dev.mysql.com/downloads/workbench 。 [オンラむン]
6. ajaxs.ru/lesson/javascript/137-transliteracija_stroki_na_javascript.html [オンラむン]

Source: https://habr.com/ru/post/J262387/


All Articles