[問題] 資料存取的問題

看板java作者 (GoCrazy)時間8年前 (2016/07/18 18:32), 8年前編輯推噓2(208)
留言10則, 6人參與, 最新討論串1/2 (看更多)
想請問一下 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

07/18 19:01, , 1F
要達成很簡單,問題是你是還是要用 SQL 的方式去存取
07/18 19:01, 1F

07/18 19:02, , 2F
修正: "是不是"還是要用 SQL....
07/18 19:02, 2F

07/18 19:04, , 3F
如果可以的話不用SQL也沒關係
07/18 19:04, 3F

07/18 19:05, , 4F
只是還是需要有類似SQL的抓取資料的方法就可以
07/18 19:05, 4F

07/18 19:05, , 5F
目前我都是在用資料去比對A欄位的值然後抓B跟C
07/18 19:05, 5F

07/18 19:10, , 6F
還是要用 SQL query 語法去抓資料就是了?
07/18 19:10, 6F

07/18 19:14, , 7F
不限SQL 只要能抓出資料就可以
07/18 19:14, 7F

07/18 19:30, , 8F
那其實可以自己寫一個 class 用 Map 和 List 去做就好啦
07/18 19:30, 8F

07/18 21:06, , 9F
請問是什麼意思 我不太懂 囧
07/18 21:06, 9F

07/18 21:16, , 10F
你是不懂什麼是 Map,還是不懂怎麼用 Map 做?
07/18 21:16, 10F

07/18 21:20, , 11F
我是不太懂怎麼用MAP做 沒有一個想法要怎麼把這東西
07/18 21:20, 11F

07/18 21:20, , 12F
轉換成 我要的東西
07/18 21:20, 12F

07/18 21:41, , 13F
你寫Java可是不知道Map @@ 可以去官網看Collections
07/18 21:41, 13F

07/18 21:45, , 14F
我知道MAP 只是沒有一個想法要怎麼去用再我要的東西上面
07/18 21:45, 14F

07/18 21:46, , 15F
我先來看看好了
07/18 21:46, 15F

07/18 21:49, , 16F
memcache / coherence
07/18 21:49, 16F

07/18 22:21, , 17F
問題是你的資料量多大?記憶體夠放嗎?
07/18 22:21, 17F

07/18 23:23, , 18F
HSQLDB不知道是不是你要的
07/18 23:23, 18F

07/18 23:40, , 19F
目前是三十萬筆資料左右 感覺應該夠(?)
07/18 23:40, 19F

07/18 23:42, , 20F
因為我目前程式都寫好了 主要是太多一筆一筆SQL的呼叫
07/18 23:42, 20F

07/18 23:43, , 21F
所以造成程式效率低落 想要找其他方法加速程式效率
07/18 23:43, 21F

07/18 23:43, , 22F
HSQLDB 我也會去看看 希望能找到方法解決
07/18 23:43, 22F

07/19 00:34, , 23F
你這應該是後面db要處理 跟前面沒什麼關係吧
07/19 00:34, 23F

07/19 00:36, , 24F
如果要寫入 最好是包成一個檔案在寫入
07/19 00:36, 24F

07/19 00:38, , 25F
或是用connection pool 開多個去存取
07/19 00:38, 25F

07/19 00:39, , 26F
我倒是覺得這個跟你寫法沒什麼關係 不做處理一次run一
07/19 00:39, 26F

07/19 00:39, , 27F
個sql會慢非常正常
07/19 00:39, 27F

07/19 00:46, , 28F
我覺得你把存取資料庫的方法跟呼叫的方式描述一下吧
07/19 00:46, 28F

07/19 00:47, , 29F
搞不好根本就是寫法的問題 例如每下一次SQL開關一次連線
07/19 00:47, 29F
-- 我存取資料庫的方式是用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

07/19 05:04, , 30F
TableA有三十萬筆 用do while 要很快...
07/19 05:04, 30F

07/19 05:07, , 31F
ColumnA要做index吧 記憶體式的db或許適合你
07/19 05:07, 31F

07/19 05:11, , 32F
不然就是 30萬一次查出來 用java8的stream 記憶體夠就行
07/19 05:11, 32F

07/19 08:49, , 33F
我有對columnA做index 還是覺得很慢QQ
07/19 08:49, 33F

07/19 11:41, , 34F
我看過一個文章 少用select *
07/19 11:41, 34F

07/19 11:51, , 35F
我有些大table會用到TEMPORARY TABLE
07/19 11:51, 35F

07/19 11:54, , 36F
不過我資料是靜態歷史紀錄 條件下資料丟temp然後分析
07/19 11:54, 36F

07/19 15:11, , 37F
搜尋java in-memory indexed database就有很多library
07/19 15:11, 37F

07/20 22:10, , 38F
改用PreparedStatement應該可以改善一點點
07/20 22:10, 38F

07/21 20:49, , 39F
guava的Loading Cache, or 試試redis
07/21 20:49, 39F
文章代碼(AID): #1NZB0dtR (java)
文章代碼(AID): #1NZB0dtR (java)