我正處於構建仿真的規劃階段,需要關於如何根據內存和速度考慮來表示數據的想法。對於仿真系統,哪種數據結構最合適?
在每個時間步驟,模擬過程創建10^3到10^4個新數據記錄,並查看每個新的或現有記錄(其中有10^6到10^8個),然後刪除它或修改它。
每條記錄都有3-10個簡單字段,每個字段可以是一個整數,也可以是幾個ASCII字符的字符串。另外,每個記錄還有1-5個其他字段,每個字段都是一個包含整數的可變長度列表。典型的記錄重量爲100-500字節。
修改或刪除過程如下工作:對於此記錄,計算一個函數,其參數是某些此記錄的字段的值,以及另一個記錄的這些字段的值。根據結果,該過程準備以某種方式刪除或修改其字段。
然後重複每個其他記錄。然後移動到下一個記錄並重復。當所有記錄都被處理完畢後,仿真就可以轉移到下一個時間步驟。
在轉到下一個時間步驟之前,應用準備的所有刪除和修改。
允許的記錄越多,仿真效果越好。如果所有記錄都在RAM中,則下行是仿真大小,並且可能上行速度。模擬不需要是實時的,但顯然我不希望它太慢。
爲了表示內存中的每條記錄,我知道這些選項:列表或字典(其中嵌套一些列表)或類實例。爲了將所有記錄儲存起來並在另一天繼續進行模擬,我逐漸熟悉的選項是:一個csv文件,其中每行都是記錄,或者只是將所有記錄放入RAM中,然後將它們放入一個文件中(可能使用醃菜),或者使用某種數據庫。
我學過Python基礎知識,加上一些像發電機的概念,但沒有學過數據庫,沒有嘗試過酸洗,顯然需要了解更多。如果可能的話,我會避免使用多臺計算機,因爲我只有1個併發數,因爲它看起來太可怕了。
對於如何在內存中表示記錄以及如何存儲模擬系統,您有何建議?
先從最簡單的方法開始,但是留下[只要]抽象以根據需要進行更改。無論如何,「關鍵值存儲」或「持久哈希」存儲可能值得研究。 – 2013-03-06 00:43:30