用Python编写应用程序,并使用各种ORM设置和直接SQL.所有这些都是罪恶的丑陋.
我一直在将ZODB视为一个对象存储,它看起来很有前途......你会推荐它吗?您的经验,问题和批评是什么,特别是关于开发人员的观点,可扩展性,完整性,长期维护和替代方案?有人用它开始一个项目并抛弃它吗?为什么?
虽然ZODB,Pypersyst和其他人背后的想法很有趣,但他们似乎缺乏热情:(
看plone.org找到一种方法来定期打包我的实例的ZODB我只能找到http://plone.org/documentation/faq/how-do-i-pack-the-zodb,而不是谈论自动化包,但只是手动启动的.
我知道我可以使用wget或curl模拟手动包,但我想知道这是否是生产网站使用的最佳实践.
我试图通过以下代码生成数据:
for Gnodes in G.nodes() # Gnodes iterates over 10000 values
Gvalue = someoperation(Gnodes)
for Hnodes in H.nodes() # Hnodes iterates over 10000 values
Hvalue =someoperation(Hnodes)
score = SomeOperation on (Gvalue,Hvalue)
dic_score.setdefault(Gnodes,[]).append([Hnodes, score, -1 ])
Run Code Online (Sandbox Code Playgroud)
由于字典很大(10000个键X 10000个列表,每个包含3个元素),因此很难将其保存在内存中.我正在寻找一个解决方案,它存储密钥:值(以列表的形式)对生成后立即.这里建议,以特定格式(Python)编写和阅读字典,以将ZODB与Btree结合使用.
如果这太天真,请耐心等待,我的问题是,何时应该调用transaction.commit()提交数据?如果我在内部循环结束时调用它,则生成的文件非常大(不确定原因).这是一个片段:
storage = FileStorage('Data.fs')
db = DB(store)
connection = db.open()
root = connection.root()
btree_container = IOBTree
root[0] = btree_container
for nodes in G.nodes()
btree_container[nodes] = PersistentList () ## I was loosing data prior to doing this
for Gnodes in …Run Code Online (Sandbox Code Playgroud) 我使用plone.app.blob将大型ZODB对象存储在blobstorage目录中.这减少了Data.fs上的大小压力,但我无法找到有关备份此数据的任何建议.
我已经通过将网络备份工具指向repozo备份目录来备份Data.fs.我应该简单地将该工具指向blobstorage目录来备份我的blob吗?
如果正在重新打包数据库或在复制过程中添加和删除blob,该怎么办?blobstorage目录中是否有必须按特定顺序复制的文件?
我是zope的新手,之前我在Django工作了大约2.5年.因此,当我第一次跳入Zope(第2版)时(仅因为我的新公司7年来一直使用它),我遇到了这些问题.请帮助我理解它们.
zodb的"真正"目的是什么?我知道它做了什么,但告诉我zodb做的一件好事和像Django(没有zodb)这样的框架未命中.
更新:根据答案,Zodb取代了对ORM的需求.您可以直接将对象存储在db(zodb本身)中.
据说,zope的杀手功能之一是TTW(通过网络或使用ZMI开发)的理念.但我(和任何开发人员)更喜欢基于文件系统的开发(使用Version控件,使用Eclipse,使用Zope之外的任何喜欢的工具).那TTW实际上在哪里使用?
这是一个很大的问题.与Python/Django继承相比,Zope的Acquistion获得了什么"EXTRA Stuff".
来自Django的Zope真的是一个很好的举动吗?
任何网站如djangosnippets.org for Zope(v2)?
我的data.fs是500 MB,所以我打包然后备份它,导致100 MB.
我的主机帐户只有500 MB,所以我想知道删除data.fs.old(500 MB)是否安全?
看着我的ZEO工作人员,我会看到很多:
2013-10-18T11:59:54 INFO ZPublisher.Conflict ConflictError at
/VirtualHostBase/http/www.domain.com:80/Plone/VirtualHostRoot/:
database conflict error (oid 0x533cd5, class
persistent.mapping.PersistentMapping) (78 conflicts (0 unresolved)
since startup at Mon Oct 14 04:09:45 2013)
Run Code Online (Sandbox Code Playgroud)
因为他们被记录,INFO我认为这根本不是有害的吗?
而且我想如果发生冲突是因为ZODB上的写入太多了?
我正在使用ZODB它,据我所知,它pickle用于存储类实例.我正在做一些重构,我想将models.py文件拆分成几个文件.但是,如果我这样做,我认为pickle将无法找到类定义,因此将无法加载我已存储在数据库中的对象.处理这个问题的最佳方法是什么?
我正在使用pyramid_tm和pyramid_mailer运行金字塔.我正在通过Sentry日志记录服务捕获以下回溯:
Stacktrace (most recent call last):
File "transaction/_transaction.py", line 374, in _callAfterCommitHooks
rm.abort(self)
File "/srv/pyramid/trees/venv/lib/python3.4/site-packages/repoze/sendmail/delivery.py", line 119, in abort
raise ValueError("TPC in progress")
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,回溯并不包含太多信息,我不确定这与哪些相关以及正在进行的TPC意味着什么.我认为这在某种程度上与提交挂钩之后的事务相关,发送电子邮件,我想在提交钩子到位之后很少有事务状态在某种程度上是意外的.
这是什么意思?
为什么回溯不会透露更多信息?它是在一个单独的线程中运行的吗?
my.packages是src目录中的自定义archetypes包.Plone实例中的数千个项目都添加了其类型.我想将包重命名为my.package.通过简单的卸载my.packages和安装my.package,我找到的http://本地主机:8080/mysite的/ MyFolder中/我的项目展示<persistent broken my.packages.content.mytype.MyType instance '\x00\x00\x00\x00\x00Un^'>.我应该做迁移吗?或者有一种简单的方法可以解决这个问题吗?
zodb ×10
python ×6
plone ×5
zope ×5
acquisition ×1
blobstorage ×1
cron ×1
django ×1
pack ×1
pickle ×1
pyramid ×1
refactoring ×1