问题标签 [prevayler]
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.
java - Prevayler 的同步策略是什么?
Prevayler 保证所有写入(通过其事务)都是同步的。但是阅读呢?
如果不使用显式同步(在用户代码中),脏读是可能的吗?
如果业务对象被解读为:
?
如果是这样,哪些同步策略对用户代码有好处?
(考虑一个业务对象 A 包含业务对象 Bs 的集合),
- 使用同步集合(A 内的 B),例如来自 java.util.concurrent 包?
- 同步集合读取外部事务与集合写入事务内部,例如在读写周围使用“同步(集合)”代码?
prevayler - 在 Prevayler 命令中处理复杂对象
Prevayler 发行版中包含的演示展示了如何将一对字符串(或类似的简单内容)传递到命令构造函数中,以创建或更新对象。问题是我有一个名为 MyObject 的对象,它有很多字段。如果我必须手动将它们全部传递到 CreateMyObject 命令中,那将是一件痛苦的事情。
所以我想到的另一种选择是将我的业务对象本身传递给命令,但要挂在它的克隆上(请记住,我不能将 BO 直接存储在命令中)。当然,执行此命令后,我需要确保处理掉我传入的原始副本。
Prevayler wiki说:
事务不能携带对业务对象的直接对象引用(指针)。这已被称为洗礼问题,因为它是一个常见的初学者陷阱。直接对象引用不起作用,因为一旦事务被序列化到日志然后反序列化以执行,它的对象引用不再引用预期的对象 - 他们可能首先引用的任何对象都将被序列化复制过程!因此,事务必须为它想要引用的任何对象携带某种字符串或数字标识符,并且它必须在执行时查找对象。
我认为通过克隆传入的对象,我将解决“直接对象指针”问题,但我仍然不知道这是否是个好主意......
dart - 如何使用 dartvm 实现应用流行?
在服务器上使用 dartvm 实现应用程序流行(想想 Prevayler)有哪些选择?
我正在寻找一个纯 Dart 解决方案(没有 Java/Prevayler 的进程间套接字)
任何现有的代码或项目?
java - Prevayler 序列化优化
我正在与 Prevayler 合作,进行一些非常简单的压力测试。
在我的程序中,我可以在 500 毫秒内获得 10,000 次读取,但写入或更改一个对象需要 23 毫秒。(我没有这台电脑的详细规格。没什么令人印象深刻的。双核 3.0ghz,7200rpm HD,可能还有 1333mhz ddr3 内存。)
序列化似乎是瓶颈。
可以做些什么来提高写入/更改性能?
JProfiler 我在 JProfiler 中运行程序(将 10,000 个用户对象写入磁盘。),它运行了 250 秒,其中 99.6% 用于运行 org.implementation.PrevaylerImpl.execute
更新 我切换到 XStreamSerializer,它将写入速度提高到每次写入 21 毫秒,并减少了存储
3555KB 日志/10,000 个对象 -> 2421KB
350KB 快照/10,000 个对象 -> 313KB
我希望看到 1000+ 次写入/秒。
java - Java 序列化 Clojure 数据结构的大小
我在 github 项目 prevayler-clj 上打开了这个问题
https://github.com/klauswuestefeld/prevayler-clj/issues/1
因为像这样的 1M 短向量,[:a1 1]
形成了 prevayler 的状态,在使用 Java writeObject 逐个序列化时会产生 1GB 的文件大小。
是否可以?每个 PersistentVector 大约 1kB?进一步的研究表明,相同数量的向量可以在一个 80MB 的文件中序列化。那么,prevayler 序列化出了什么问题呢?我在这些测试中做错了什么吗?请参阅 github 问题以获取我的测试代码摘录。
java - Prevayler 类型不是通用的;它不能用参数参数化
我一直在阅读有关容错的检查点技术。所以,我正在使用prevayler
java 库进行检查点。现在,我有一个错误显示类型Prevayler
不是通用的;它不能用 arguments 参数化<P>
。你能给我这个错误的指导吗?
这是我的代码:
android - 如何在 OpenJDK (Android 7+) 中反序列化已在 Apache Harmony (Android *-6) 中序列化的对象?
我的应用程序使用http://prevayler.org/进行持久化,搭载 Java 对象序列化。升级到 Android 7.0 (Nougat) 后,用户无法打开他们的数据,因为反序列化不再起作用:
在反序列化枚举时,OpenJDK 例程读取“71”的意外字节值并抛出异常,从源代码中可以看出:http: //grepcode.com/file/repository.grepcode.com/java/ root/jdk/openjdk/8u40-b25/java/io/ObjectInputStream.java#ObjectInputStream.readString%28boolean%29
我有以下想法:
- 设置一个迁移服务器,它将同时运行 Harmony 和 OpenJDK 进程,从而执行数据迁移。
- 破解二进制格式并修复枚举序列化(假设这是唯一一个问题,我对此表示怀疑)
- 使用 AspectJ 破解反序列化
所有这些选择似乎都是矫枉过正或不令人满意。在我开始破解二进制文件之前,也许有人对如何使用新的运行时反序列化旧数据有更好的了解?谢谢你。