看板 java 關於我們 聯絡資訊
想請問一下 JAVA有沒有方法可以讓資料用類似資料庫的方式儲存跟存取在記憶體內 目前我有一個資料庫如下 -- A | B | C ---------------- 1 | 1 | 5 1 | 2 | 5 2 | 3 | 4 -- 可是除了資料數量很大以外 同時我也需要一直跟資料庫存取 造成大多數時間都在跟資料庫做指令跟等待資料庫回應 想請問一下是否有其他方法可以讓資料放在記憶體內可以快速存取的方法 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.117.80.55 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1468837927.A.DDB.html
darkk6: 要達成很簡單,問題是你是還是要用 SQL 的方式去存取 07/18 19:01
darkk6: 修正: "是不是"還是要用 SQL.... 07/18 19:02
gw10313: 如果可以的話不用SQL也沒關係 07/18 19:04
gw10313: 只是還是需要有類似SQL的抓取資料的方法就可以 07/18 19:05
gw10313: 目前我都是在用資料去比對A欄位的值然後抓B跟C 07/18 19:05
darkk6: 還是要用 SQL query 語法去抓資料就是了? 07/18 19:10
gw10313: 不限SQL 只要能抓出資料就可以 07/18 19:14
darkk6: 那其實可以自己寫一個 class 用 Map 和 List 去做就好啦 07/18 19:30
gw10313: 請問是什麼意思 我不太懂 囧 07/18 21:06
eieio: 你是不懂什麼是 Map,還是不懂怎麼用 Map 做? 07/18 21:16
gw10313: 我是不太懂怎麼用MAP做 沒有一個想法要怎麼把這東西 07/18 21:20
gw10313: 轉換成 我要的東西 07/18 21:20
Expsun: 你寫Java可是不知道Map @@ 可以去官網看Collections 07/18 21:41
gw10313: 我知道MAP 只是沒有一個想法要怎麼去用再我要的東西上面 07/18 21:45
gw10313: 我先來看看好了 07/18 21:46
SHANGOYANYI: memcache / coherence 07/18 21:49
steven11329: 問題是你的資料量多大?記憶體夠放嗎? 07/18 22:21
ripple0129: HSQLDB不知道是不是你要的 07/18 23:23
gw10313: 目前是三十萬筆資料左右 感覺應該夠(?) 07/18 23:40
gw10313: 因為我目前程式都寫好了 主要是太多一筆一筆SQL的呼叫 07/18 23:42
gw10313: 所以造成程式效率低落 想要找其他方法加速程式效率 07/18 23:43
gw10313: HSQLDB 我也會去看看 希望能找到方法解決 07/18 23:43
p23j8a4b9z: 你這應該是後面db要處理 跟前面沒什麼關係吧 07/19 00:34
p23j8a4b9z: 如果要寫入 最好是包成一個檔案在寫入 07/19 00:36
p23j8a4b9z: 或是用connection pool 開多個去存取 07/19 00:38
p23j8a4b9z: 我倒是覺得這個跟你寫法沒什麼關係 不做處理一次run一 07/19 00:39
p23j8a4b9z: 個sql會慢非常正常 07/19 00:39
haha02: 我覺得你把存取資料庫的方法跟呼叫的方式描述一下吧 07/19 00:46
haha02: 搞不好根本就是寫法的問題 例如每下一次SQL開關一次連線 07/19 00:47
-- 我存取資料庫的方式是用statement去對我的MYSQL資料庫做存取 然後我下的SQL只有簡單的 "select * from tableA where A=1;" 其中我的程式有一個do while迴圈主要的SQL都下在裡面 Statement stmt = conn.createStatement(); do{ SQL="Select * from tableA where A="+變數; //主要是迴圈變數會變 rs=stmt.executeQuery(SQL); //執行每次的SQL if(rs.next()){ //如果有這筆資料就做我要的計算 do something; } }while(); -- 大概是這樣 我大概知道是太常跟資料庫下SQL 每筆資料進來都有新的變數 所以我就會跟資料庫下SQL 可是這樣造成我程式效率低落 所以才來這邊想要請問一下大家有什麼比較好的方法 前面沒有說清楚真的不好意思 -- ※ 編輯: gw10313 (140.117.80.55), 07/19/2016 04:07:54
jej: TableA有三十萬筆 用do while 要很快... 07/19 05:04
jej: ColumnA要做index吧 記憶體式的db或許適合你 07/19 05:07
jej: 不然就是 30萬一次查出來 用java8的stream 記憶體夠就行 07/19 05:11
gw10313: 我有對columnA做index 還是覺得很慢QQ 07/19 08:49
dennisxkimo: 我看過一個文章 少用select * 07/19 11:41
dennisxkimo: 我有些大table會用到TEMPORARY TABLE 07/19 11:51
dennisxkimo: 不過我資料是靜態歷史紀錄 條件下資料丟temp然後分析 07/19 11:54
yyc1217: 搜尋java in-memory indexed database就有很多library 07/19 15:11
haha02: 改用PreparedStatement應該可以改善一點點 07/20 22:10
marsyang1: guava的Loading Cache, or 試試redis 07/21 20:49