2017-04-19 45 views
0

我需要運行一個處理大量數據的進程。太大以至於無法在RAM中合理使用。數據不需要在流程實例之間保存或在流程實例之間共享,所以我希望能夠使用某種基於磁盤的數據庫來存儲。Ruby on Heroku的瞬態文件系統鍵/值存儲?

我的第一個想法是SQLite,但Heroku明確不支持。我嘗試的第二件事是Ruby的PStore,但事實證明對於這份工作來說太過荒謬了。我嘗試的下一件事是DBM,Heroku似乎並沒有說他們不支持。但是,當我嘗試在部署代碼後運行代碼時,出現「LoadError:無法加載此文件 - dbm」。

既然我做需要的流程實例之間進行持續的數據,有沒有什麼辦法來解決Heroku的偏見對支持基於文件的關係或鍵/值數據存儲?

+0

我的臨時解決方案是使用https://github.com/peterc/rsmaz將數據填充到RAM中,但這比使用不會在Heroku上運行的DBM的解決方案的WAAAAY慢,並且數據集增長比現在大得多,我仍然可能結束顛簸的記憶,這可能會讓它變得非常慢。 –

+0

我最終嘗試了SDBM,但事實證明它太片質。我從來沒有找到一個可行的工具,但我爲這個問題寫了一個基於文件的自定義解決方案,比壓縮數據將其壓入RAM更好更快。 –

回答

1

我不確定數據的結構是什麼,但是您有沒有考慮過使用Redis? Heroku上有一個有效的免費套餐。基於文件的解決方案的問題在於Heroku使用短暫的文件系統。它不是爲了擴展計算單元之間的磁盤空間而設計的。

+0

Redis實際上是我嘗試的第一件事,但免費套餐太小了。與Redis相比,我的Dyno RAM的空間大約多10倍,所以它實際上使問題變得更糟,而不是更好。如果Redis足夠的存儲空間對您有幫助,那麼這筆費用大約爲40美元/月。 –