• ベストアンサー

JDBCの性能は?

いつもお世話になってます。 今、数千万以上のデータを扱うのに、JDBCかXML(DOM,SAX)にしようか迷っています。 でもJDBCはまださわったことがありません。 データの扱いは、書き込みと参照の連続です。 これだとDOMではメモリに限界があると思うのでJDBCにしようかと考えた次第です。 そこで聞きたいのですが、JDBCの動作(insertやselect)のスピードは速いのでしょうか? JDBCを使っている方、ささいな情報でもいいのでよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • hidebu-
  • ベストアンサー率53% (45/84)
回答No.2

XMLで数千万以上のデーターを扱うというのはかなり無茶だとおもいます。トリガやストアドプロシージャなどをつかってトランザクション分散ができませんし(EJBにすると分散はできますが、極限までパフォーマンスを出したいときはEJBという解ははずれますし。)、XMLだと基本的に全走査になりますから現実的ではないとおもいます。 現状ではXMLはアプリケーション間のデータの受け渡しや設定ファイルとして扱われることが多く、速度以前の問題として蓄積データをRDBの代わりに扱うことは現実的ではないとおもいます。

shotaro777
質問者

お礼

回答ありがとうございます。 なるほど、XMLでそれぐらいのデータを扱うのは無茶のようですね。 今のところ、その大量のデータを分割してファイル名で判断してから読み書きしようかと考えています。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • yuji
  • ベストアンサー率37% (64/169)
回答No.1

JDBCを使って構築されている本番システムはいくつもあります。 それが答えでは? JDBCのTypeにもType 1,2,3,4とあります。 Pure Java なら Type 4 ですが、速度重視なら Type 2 の方がいいかもしれません。 ただし、私は性能測定を行ったことはありません。 個人的にJDBCの速度に不満を持ったことは一度もありません。

shotaro777
質問者

お礼

回答ありがとうございます。 なるほど、Type2の方が速いんですね。 勉強になりました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • DOMデータを使ってSAXで解析する方法

    Javaで作成したDOMデータをSAXを使って解析するには どのようにしたら良いのでしょうか? サンプル等ではXMLファイルを読み込んで解析する処理は 沢山あるのですが、DOMのデータをSAXに渡して解析 するような処理が見当たらなかったので質問しました。

    • ベストアンサー
    • XML
  • eclipseでのJDBCについて

    eclipseのMySQLJDBCの外部接続に関して全く分からず手詰まりしているので、ご教授願いたいと思います。 プロジェクトの配下のweb.xmlにMySQLの接続情報を入力しました。一応ソースです。 web.xmlに <context-param> <param-name>jdbcDriver</param-name> <param-value>com.mysql.jdbc.Driver</param-value> <description>JDBC Driver</description> </context-param> <context-param> <param-name>jdbcUri</param-name> <param-value>jdbc:mysql://localhost:3306/airticket?useUnicode=true&amp; characterEncoding=sjis</param-value> <description>MySQL URI</description> </context-param> <resource-ref> <res-ref-name>jdbc/MySQL_JDBC</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> を書いて、 会員登録をするクラスに、 try{ try{ //ドライバクラスをロード Class.forName("com.mysql.jdbc.Driver").newInstance(); } catch(Exception ex) { } //データベースへ接続 String url = "jdbc:mysql:///airticket?useUnicode=true&characterEncoding=SJIS"; Connection con = DriverManager.getConnection(url); //ステートメントオブジェクトを生成 Statement stmt=con.createStatement(); String sql="insert into member(member_id,member_pass,family_name,first_name,birth_year,birth_month,birth_day,address,post_code,mail,"+"sex,home_tel,job) values('"+ member_id +"',"+ mempasslong +",'"+ family_name +"','"+ first_name +"',"+ birth_year +","+ birth_month +","+ birth_day +",'"+ address +"',"+ post_code +",'"+ mail +"',"+sexint+","+ home_tel +",'"+ job +"');"; int result=stmt.executeUpdate(sql);       stmt.executeBatch(); // データベースから切断 stmt.close(); con.close(); } catch (Exception e) { message = "登録失敗しました。"; request.setAttribute("message", message); return mapping.findForward("registererror"); } message = "登録完了しました。"; request.setAttribute("message", message); return mapping.findForward("success"); } } って書いてクラスからweb.xmlを参照してデータベース接続したいんですが、エラーが出ずに困っています。そもそもクラスからweb.xmlの情報を参照するやりかたはあるのですか?教えてください

  • JavaからXMLプロセッサを使うとは?

    JavaでXMLを処理する必要に駆られまして、一念発起して勉強しています。 XMLを処理するためには、JavaのAPIがあってそれを利用するというのはokで、処理方法にはDOM・SAX・XSLTといったものがあるというのもわかりました。 ただ、DOMやSAXが、Javaプログラムからデータを読む手助けをするためのモノというのはわかるのですが、XSLTはただの変換とどう違うのでしょうか? 本を読む限り、XSLの規則にしたがって変換するもの。となっていて、読み込ませる→変換結果が出てくる、で、なんだかHTMLの生成くらいにしか使えないような印象なのですが、Javaとタッグを組んでデータを処理させたい場合、どんな使われ方をするのでしょうか。 DOMやSAXでも良いじゃんと言われそうなのですが、HTMLも同時に扱う必要があるため、ぜひ習得したいのです。 ですが、市販のJava本はほとんどXMLパーサ関係ばかりで・・・。また、何かいい参考書もあったら教えていただきたいと思います。

    • ベストアンサー
    • Java
  • TomcatのJDBC連携について

    TomcatのJDBC連携について javax.servlet.ServletException: Cannot create JDBC driver of class '' for connect URL 'null' というエラーが消えず、知恵をお貸しください。 他にも同様のケースについて調べては見たのですが解決しません。 ■環境 Windows XP SP3 Eclipse3.6(Pleiades All in One 3.6.0.20100623) apache-tomcat-5.5.29 mysql-essential-5.1.48 ■設定 ■server.xml に下記を追加 <Context docBase="Test" path="/test" reloadable="true" source="org.eclipse.jst.j2ee.server:Test"> </Context> ■Tomcat 5.5/conf/Catalina/localhost/Test.xml に下記を記載 <Context docBase="${catalina.home}/server/webapps/test" privileged="true" antiResourceLocking="false" antiJARLocking="false"> <Resource name="jdbc/MySQL_JDBC" auth="Container" type="javax.sql.DataSource" factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=sjis" username="**" password="**" maxActive="20" maxIdle="30" maxWait="1800"/> </Context> ■Webアプリケーション配下の web.xmlに下記を追加 <resource-ref> <res-ref-name>jdbc/MySQL_JDBC</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> ■JSPソースに下記を記載 jdbc.jsp <% InitialContext initCon = new InitialContext(); DataSource ds = (DataSource) initCon.lookup("java:comp/env/jdbc/MySQL_JDBC"); Connection con = ds.getConnection(); Statement stmt = con.createStatement(); ResultSet result = stmt.executeQuery("select * from mytable;"); while (result.next()) { 表示処理 } con.close(); initCon.close(); %> 別途作成した下記JSPではデータ取得はできています。 <% Class.forName("com.mysql.jdbc.Driver"); Connection conn=DriverManager.getConnection("jdbc:mysql://localhost/test?" + "user=tester&password=tester&useUnicode=true&characterEncoding=Shift_JIS"); Statement st=conn.createStatement(); ResultSet res = st.executeQuery("select * from mytable");

    • ベストアンサー
    • Java
  • JDBCについて

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import com.mysql.jdbc.PreparedStatement; import com.mysql.jdbc.Statement; public class DBtest { public static void main(String[] args){ try { Connection con = null; PreparedStatement ps = null; String url = "jdbc:mysql://localhost/address"; String user = "test"; String password = "pass"; con = DriverManager.getConnection(url, user, password); Statement st = (Statement) con.createStatement(); Statement st2 = (Statement) con.createStatement(); String sql = "SELECT * FROM data2"; ResultSet rs = st2.executeQuery(sql); try { System.out.println("ok"); // ここでクエリを実行 while(rs.next()){ System.out.println(rs.getString("name")+rs.getString("age")); } //氏名入力 System.out.println("氏名を入力してください。"); BufferedReader na = new BufferedReader(new InputStreamReader(System.in)); String Na = na.readLine(); String ins = "INSERT INTO data2(name,age)VALUES('?',20)"; ps = (PreparedStatement) con.prepareStatement(ins); ps.setString(1,Na); ps.executeUpdate(); //INSERT実行 int rs2 = st2.executeUpdate(ins); System.out.println(rs2); } catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } finally { // 直前の try ブロックに入ったら、ここは必ず実行される con.close(); } } catch (SQLException ex) { System.out.println("SQLException: " + ex.getMessage()); System.out.println("SQLState: " + ex.getSQLState()); System.out.println("VendorError: " + ex.getErrorCode()); // 接続できない時 } } } 現在javaでmysqlに接続してDB内の検索や追加等を行うものを作成しています。 現状は入力されたものをDBに追加することまでできましたが 検索で 入力された値がDBの中に一致する、または部分一致したものを表示させるやり方がわかりません

    • ベストアンサー
    • Java
  • XML文書はどんな処理をしていますか?

    最近、遅ればせながらも、XML, XSLT, SAX, DOMなどに関心を持っています。 私が感じているところでは、固定長などのテキストファイルの代わ りにXML、構成ファイルにXMLといった感じで、C/C++, Javaなどで 処理する対象としては使われていない気がします。規格はたくさん 出ていて、いろりろできる感じがするのですが、どうも使われてい るように思えない・・・XMLベースのシステムであるWebSvcも、パ イロットPJTばかりでビジネスとして立ち上がっていない。 皆さんのところでは、XMLって使ってらっしゃいますか?ここらへ んを勉強するのにどんなリソースを参照されていますか?お勧めは ありますか? 宜しくお願いします。

    • ベストアンサー
    • XML
  • ibatis初心者 設定エラー

    ibatisにてデータをinsertしようとしたら以下のようなエラーがでてしまいました。 com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMapConfig/sqlMap'. Cause: java.io.IOException: Could not find resource SqlMap-blogA.xml Configuration.xmlは以下の通りとなっております。 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <!-- DB接続設定 --> <transactionManager type="JDBC"> <dataSource type="SIMPLE"> <property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/> <property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost:3306/blog"/> <property name="JDBC.Username" value="root"/> <property name="JDBC.Password" value="nicelife"/> </dataSource> </transactionManager> <!-- sqlMapファイル参照する --> <sqlMap resource="SqlMap-blogA.xml"/>←ここの相対パスが問題 </sqlMapConfig>   ちなみにSqlMap-blogA.xmlとConfiguration.xmlはWEB-INFの直下にて同じ場所においてありますので、上記の Could not find resource SqlMap-blogA.xmlは出ないと思うのですが・・・それと Error parsing XPath '/sqlMapConfig/sqlMap'.これの意味もよくわかりません。   どうすればいいのかわかりません   なにかアドバイスをいただけたらありがたいのですが・・・・   ご教授の程よろしくお願い申し上げます。

  • SAXによる文字データの読み込み方法

    現在、自作アプリのデータをXMLでファイルに保存し、SAXで読み込み処理をしようと考えております。 データは、次のようなものと仮定します。 <歌> <曲名>○○の歌</曲名> <作曲者>某 太郎</作曲者> </歌> 上記のようなXMLの場合、曲名、作曲者をcharacters()で得ることとなると思うのですが、どちらのデータなのかを判断する方法が分かりません。 startElement()で場合分けして、フラグをたてておいて、characters()内で、そのフラグを見て判断するしかないのでしょうか? なんか、スマートでない気がして、なにかいい方法がないかと悩んでいます。 ファイルから読み込んで、すぐに自前のクラスに代入するのですが、DOMでツリーを作った方がいいのでしょうか? なにか、よい方法をご存じでしたらご教授下さい。 よろしくお願いいたします。

    • 締切済み
    • XML
  • VBscriptでXMLデータの抽出に関する質問

    教えて下さい。以下のようなXMLファイルがあります。 <?xml version="1.0" encoding="Shift-JIS"?> <ROOT> <INFO> <NO>0001</NO> <NAME>ABC</NAME> <COMMENT> </COMMENT> <AGE>30</AGE> </INFO> </ROOT> これを以下のようにVBScriptにてデータを取り出したいです。 Dim DOM, docRoot, node, nodeList, i, m Dim objADO, objADO2 Dim objRS Dim sqlstmt, strSQL Dim no, comment 'DOMオブジェクト生成 Set DOM = CreateObject("Microsoft.XMLDOM") '同期モード DOM.async = True 'XMLを読み込む DOM.load("11.xml") 'ルートセット Set docRoot = DOM.documentElement 'ノードの設定 Set nodeList = docRoot.selectNodes("/ROOT/INFO") 'ループ For Each node In nodeList For i = 0 to node.ChildNodes.length - 1 Select case node.childNodes(i).nodeName case "NO" no = node.childNodes(i).firstChild.nodeValue case "COMMENT" comment = node.childNodes(i).firstChild.nodeValue End select Next Next ところがCOMMENTタグのようにデータが空のものがあると 「オブジェクトがありません」とエラーになります。 if Not IsNull(node.childNodes(i).firstChild.nodeValue) then というようにもやってみましたが、これでも同じエラーとなってしまいます。 何か方法はないでしょうか?アドバイスを宜しくお願いします。

    • ベストアンサー
    • XML
  • PHP5でsimple_xml_load_fileするとエラーになっちゃいます。

    simple_xml_load_fileを使ってXMLを読み込んでいるのですが、読み込みの時点でエラーが出てしまいます。 Warning: simplexml_load_file() [function.simplexml-load-file]: input conversion failed due to input error, bytes 0xAD 0xB5 0x3C 0x2F ↑こんな感じです。 原因を探ったところ、XMLファイルのデータ中にローマ数字(I、II、・・)があるとこのようになることが分かりました。 ちなみにsimplexml_load_stringを使用してもほぼ同様のエラーが発生しました。 ローマ数字入りのXMLファイルを読み込むことはできないのでしょうか?ご存じでしたら知恵を拝借したいのですが・・・。 ※SAX、DOMでも読み込めず(T_T)

    • 締切済み
    • PHP