问题标签 [kiokudb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
perl - 如何使用 mod_perl 正确减少冗余请求的数量?
在一个相当大的遗留项目中,我将几个毛茸茸的模块重构为 Moose 类。这些模块中的每一个都需要数据库访问(惰性)获取其属性。由于这些对象被大量使用,我想减少冗余请求的数量,例如对于未更改的数据。
现在,我该如何正确地做到这一点?我有几种选择:
- 通过一个角色在我的 Moose 类中实现缓存,以将它们存储在
memcached
5-10 分钟到期(可能不太难,但对于惰性属性很棘手)更新:KiokuDB 可能在这里有所帮助,必须阅读有关属性的信息 - 迁移到
DBIx::Class
(无论如何都需要完成)并在此级别上实现缓存(DBIC 可能会自行消除大部分痛苦) - 不知何故让我的对象在 mod_perl 进程中持续存在(不知道如何做到这一点:()
你将如何做到这一点,你认为什么是理智的方式?在对象或 ORM 级别上优先缓存数据吗?
perl - KiokuDB 中的“弱引用”是什么?
KiokuDB 教程 提到的弱引用到底是什么?
它们与“正常”参考有何不同?
perl - 我应该如何在两个 KiokuDB 目录之间复制对象?
我想确保我scope
正确理解了 KiokuDB 的概念。
假设我想从 db1 加载一个对象并将其存储在 db2 中。我必须同时“打开”两个范围吗?
perl - 哪个 KiokuDB 后端适合我的序列化需求?
我KiokuDB
用来存储几个 Moose 对象和几个简单的数组结构(散列和数组)。
我不需要任何花哨的搜索、交易等,只需获取(lookup
)对象的能力。此外,一旦我完成创建数据库,就可以将其设置为只读。永远不会对其进行任何更改。
我使用 KiokuDB 的主要(唯一?)原因是保留对象图。
占 DB 总大小的最大对象是 Moose 对象,其中有一个相对较大的数组(我们称之为对象large_obj
)。以前,我使用 Storable +甚至 JSON +存储large_obj
(单独)。它运行良好,我对结果非常满意(使用 gzip 将存储文件压缩到其原始大小的 5% 左右)。PerlIO::gzip
PerlIO::gzip
还有另一个较小的 Moose 对象,它基本上是由 20-30k 个小型 Moose 对象组成的数组。
现在,在迁移到 KiokuDB 之后,我首先使用了简单的 Hash 后端,然后再次将其转储到文件中(使用 Cmd)PerlIO::gzip
。这在相对较小的情况下效果很好large_obj
,但是一旦它变大,我就会出现内存不足的错误。我猜哈希支持不适合大型对象。
然后我尝试了推荐的 Berkeley 后端,虽然它看起来有点过头了(如前所述,我并不真的需要所有花哨的数据库功能)。它的运行速度比原始的 Storable +PerlIO::gzip
解决方案慢得多,占用的空间要多得多,而且对于更大的对象,它也会耗尽内存!(我使用 3GB RAM 的 ubuntu)。
我也尝试了Files backend,但它失败了:
您对如何以既节省空间又维护对象图的方式存储对象有什么建议吗?
perl - 我是否有理由不使用 Storable 或 YAML 序列化我的 (Moose) 对象?
我有一些 Moose 对象和一些其他简单的哈希对象(哈希、数组)我想序列化。
一开始我用了一个简单的
和
这运作良好。
后来,我发现了关于MooseX::Storage
和KiokuDB
。我尝试使用它们来享受它们所拥有的一些好处,但是:
MooseX::Storage
似乎重新创建了多次引用的对象。例如,我的一个序列化对象包含一些属性,它们中的每一个都引用另一个对象的相同实例。在序列化之前,所有这些引用显然是相同的——它们都指向同一个对象。在使用 序列化/反序列化之后MooseX::Storage
,这个曾经的单个对象被复制,并且每个引用都指向该对象的另一个实例。有人告诉我这MooseX::Storage
不适合表示对象图,我可能想尝试一下KiokuDB
。- 我做到了,尽管我觉得
KiokuDB
这对我的需求来说有点过头了。我不需要数据库可以提供的所有花哨的东西。不幸的是,由于我的一个对象非常大并且在使用默认值进行序列化时会占用内存,看来我必须编写一个自定义序列化程序或单独存储它的“数据”部分,然后再编写一个服装KiokuX::Module
......再次,相当过分。
所以,我回到了普通的 Storable 或 YAML。我的问题很简单:是的,有一些好处KiokuDB
(尤其是它维护一个对象图的事实),也许还有MooseX::Storage
(尽管我真的找不到后者)。但是,鉴于这些好处对我来说并没有真正用处,有什么理由不使用 Storable 或 YAML 吗?
换句话说,以这种方式存储(Moose)对象有什么问题吗?是“非法的”吗?
windows - Windows 上的 KiokuDB
我想知道是否有人能够在 Windows 上成功使用KiokuDB。拥有 ActivePerl 5.12.2,我没有发现它在 ppm 存储库中预编译。使用 cpan,它在测试File::NFSLock期间停止。不过,我可以用 note 安装它。
下面的简单测试似乎按记录工作:
有人在 Windows 上将它用于更大的东西,比如 DBI 后端吗?你认为它足够稳定/可用以用于一些较小的项目吗?
请至少提供一些有关您的使用方式的详细信息,以便我有一个符合我计划的想法。