我需要存儲一些信息並能夠讀寫這些信息。我可以創建一個自定義的小型ZODB(http://www.zodb.org/en/latest/articles/ZODB1.html)並讓Plone讀/寫這個嗎?將它放在/var/filestorage/myzodb.fs中會導致現有的Plone和它使用的數據庫出現任何問題?在Plone中創建一個自定義的ZODB?
2
A
回答
3
正如我之前說的,你可以隨時使用註釋來存儲對象非模式相關的信息:
>>> from persistent.list import PersistentList
>>> from persistent.dict import PersistentDict
>>> from zope.annotation.interfaces import IAnnotations
>>> anno = IAnnotations(self.context)
>>> anno['employees'] = PersistentList(['Mary', 'Jo', 'Bob'])
>>> anno['codes'] = PersistentDict({'a': 1, 'b': 2})
更多細節
見docs如果你仍然想存儲數據不同的ZODB文件,您應該注意3個主要問題:
- 縮放
- DB連接
- DB讀/寫衝突錯誤
爲了擴展它,你應該使用ZEO(或RelStorage)。我會假設你使用zc.buildout來部署你的Plone堆棧。因此,內buildout.cfg:
[zeoserver]
recipe = plone.recipe.zeoserver
zeo-address = 127.0.0.1:8100
...
zeo-conf-additional =
<filestorage 2>
path ${buildout:directory}/var/myzodb.fs
</filestorage>
[instance]
recipe = plone.recipe.zope2instance
...
zeo-client = True
zeo-address = 127.0.0.1:8100
zope-conf-additional =
<zodb_db myzodb>
<zeoclient>
server 127.0.0.1:8100
storage 2
name myzodbstorage
</zeoclient>
mount-point /myzodb
</zodb_db>
現在,連接和存儲數據到這個新的DB:
>>> from App.config import getConfiguration
>>> from zope.component.hooks import getSite
>>> db = getConfiguration().dbtab.getDatabase(name='myzodb')
>>> conn = getSite()._p_jar.get_connection('myzodb')
>>> myzodb = conn.root()
>>> myzodb
{}
>>> myzodb['employees'] = ['Mary', 'Jo', 'Bob']
>>> myzodb['codes'] = {'a': 1, 'b': 2}
>>> import transaction
>>> transaction.commit()
+0
如果數據量較大,則可能需要使用OOBtree而不是PersistentDict。見https://www.slideshare.net/carlos.delaguardia/zodb-tips-and-tricks – Tom
0
您還可以使用souper輕重量數據:
>>> from souper.soup import get_soup
>>> soup = get_soup('my_soup_id', context)
>>> soup
<souper.soup.Soup at 0x...>
它也支持索引。
相關問題
- 1. 如何在Plone中創建自定義REST API
- 2. 在Plone自定義皮膚
- 3. 創建一個自定義的sys.stdout類?
- 4. 創建一個自定義的UITableView
- 5. 創建一個自定義的UITableViewCell
- 6. 創建一個自定義的BufferedImage
- 7. Grails - 創建一個自定義的PersistenceEventListener
- 8. Django的 - 創建一個自定義ID
- 9. 創建一個自定義的網格
- 10. 創建一個自定義DataGrid的ItemsSource
- 11. 創建一個自定義的UIScrollView Scroller
- 12. 如何添加我自己的自定義元數據以在Plone 4.1中創建自定義集合?
- 13. 自定義的Plone搜索
- 14. Plone ZODB數據庫記錄在未來
- 15. 在plone中搜索自定義類型
- 16. 創建Plone 4自定義Portlet管理器
- 17. 爲Plone 4自定義內容類型創建工作副本
- 18. 創建一個自定義視圖組
- 19. WSO2ESB創建一個自定義EntitlementCallbackHandler
- 20. 創建一個WPF自定義控件
- 21. jQuery:創建一個自定義事件
- 22. 爲ASP.Net創建一個自定義PrincipalPermission
- 23. 如何創建一個自定義NSMenuItem
- 24. PySide:創建一個自定義QCursor
- 25. 創建一個自定義datagridrowview
- 26. 創建一個自定義依賴塊
- 27. 創建一個自定義按鈕
- 28. 無法創建一個自定義com.facebook.Request.Callback
- 29. 幫助創建一個自定義創建和自定義get方法
- 30. 在Plone&Dexterity中創建一個自定義的editForm,如何保存對對象的更改?
什麼是用例?另一項服務是否直接訪問數據庫? – Mathias
Plone不會關心firestorage目錄中的未知fs文件,但我同意Mathias,使用另一個zodb似乎...古怪,但不知道你的情況到底是什麼。 –
你總是可以使用註釋來存儲對象的非模式相關信息;)https://docs.plone.org/develop/plone/misc/annotations.html#content-annotations – avoinea