我問了一個問題here。簡單地說,我的算法需要一個四維數組。尺寸可達32G。所以我打算將它存儲在MongoDB中。我用我的方式實現了它。由於我以前從未使用過MongoDB,因此我的實現太慢了,那麼應該如何將這個四維數組存儲在MongoDB中?如何在mongoDB中存儲多維數組
一些統計:
這將需要幾個小時(十餘我想,因爲我沒有等),以更新整個數組作爲我的數組大小約12 * 7000 * 100 * 500,和我服務器是Windows Server 2008 R2 Standard,內存爲16.0GB,CPU爲2.67GHz的Intel(R)Xeon(R)CPU。我的mongoDB版本是2.4.5
解釋一下我的實現。 我的數組有四個維度,分別命名爲z,d,wt,wv。
首先,我爲數組元素構造一個字符串。以數組元素p_z_d_wt_wv [1] [2] [3] [4]爲例,因爲z是1,d是2,wt是3,wv是4,我得到一個字符串「1_2_3_4」,它代表p_z_d_wt_wv [ 1] [2] [3] [4]。然後,我將p_z_d_wt_wv [1] [2] [3] [4]的值存儲在數據庫中。 使我的數據看起來象下面這樣:
{ 「_id」:{ 「$ OID」: 「51e0c6f15a66ea5c32a99773」}, 「關鍵」: 「1_2_3_4」, 「價值」:113.1232}
{「 _id」:{ 「$ OID」: 「51e0c6f15a66ea5c32a99774」}, 「關鍵」: 「1_2_3_5」, 「價值」:11.1243}
任何意見,將不勝感激!
感謝提前!
下面是我的代碼
public class MongoTest {
private Mongo mongo = null;
private DB mmplsa;
private DBCollection p_z_d_wt_wv;
private DBCollection p_z_d_wt_wv_test;
public void init()
{
try{
mongo = new Mongo();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (MongoException e) {
e.printStackTrace();
}
mmplsa = mongo.getDB("mmplsa");
p_z_d_wt_wv = mmplsa.getCollection("p_z_d_wt_wv");
}
public void createIndex()
{
BasicDBObject query = new BasicDBObject("key",1);
p_z_d_wt_wv.ensureIndex(query,null, true);
}
public void add(String key, double value)
{
DBObject element = new BasicDBObject();
element.put("key", key);
element.put("value", value);
p_z_d_wt_wv.insert(element);
}
public Double query(String key)
{
BasicDBObject specific_key = new BasicDBObject("value",1).append("_id", false);
DBObject obj = p_z_d_wt_wv.findOne(new BasicDBObject("key",key),specific_key);
return (Double)obj.get("value");
}
public void update(boolean ifTrainset, String key, double new_value)
{
BasicDBObject query = new BasicDBObject().append("key", key);
BasicDBObject updated_element = new BasicDBObject();
updated_element.append("$set", new BasicDBObject().append("value", new_value));
p_z_d_wt_wv.update(query, updated_element);
}
}
你也可以給我們一些關於它有多慢,機器規格,mongo版本的統計數據。 – bsd
我已將這些統計信息添加到我的帖子中。感謝您的提醒 – ningyuwhut