2014-01-06 60 views
0

我正在運行經濟模擬。數百或數千個代理=對象必須隨時間協議數據,數據總是具有相同的結構。它通常由許多布爾值,浮點數和整數,可能的數組/列表(5到100個不同的變量)組成。在模擬過程中,數據庫沒有讀取權限。在模擬之後,數據不會再被改變。對於每個模擬我都會創建一個新的數據庫。目前的編程語言是一個項目的java和一秒的python。也有可能將來該項目將在網絡上運行。如果很重要:對象通過0mq進行通信。我們正在使用mySql和sqllight。數據庫連接:爲百萬對象搜索數據的協議數據

如何將數千個對象連接到數據庫。最終的結果應該都在一個數據庫中。

/目前我們通過zeromq消息發送數據到一個寫入數據庫的對象。

+0

你期待什麼樣的答案? –

+0

我無法打開數千個到數據庫的連接。是否將所有寫入數據庫的對象都彙集爲最佳解決方案?你會如何設計它? –

+1

您的ZeroMQ解決方案聽起來不合理;我可能會使用其他RPC機制(但這是主觀的)。也許這個問題在[Code Review](http://codereview.stackexchange.com/)堆棧上會更好。 –

回答

0

如果你使用python(你可以以非sql格式存儲數據),我會推薦一個名爲ZODB(zope)的對象數據庫。本質上,你將創建一個字典(它可以包含字面上任何你想要的數據類型)。我用它來進行我自己的研究,並且非常棒。還有一個相當合理的學習曲線,這意味着它不會花你幾天的時間才能真正掌握它。

既然您提到在模擬過程中數據庫「沒有讀取權限」,您可以使用ZODB作爲獨立工具。但是,如果您發現自己並行運行多個模擬(例如多線程或雲計算),則必須查看ZEO(也可以通過zope),以便使其成爲一種解決方案。

您的每一個模擬都不需要它是ZODB自己的數據庫,它可以是單個「模擬」數據庫的單獨密鑰,每個運行的數據將整齊地嵌套在每個密鑰的下方。你可以這樣說:print Simulation['run99']['output']就像你說的模擬的第98次運行一樣容易。