我认为我正在寻找的是一个无SQL,嵌入式磁盘,在磁盘上(即非内存中)数据库,可以从java访问(最好在我的JVM实例中运行).这不是一个真正的数据库,我很想自己动手.基本上我正在寻找"我们应该把它保存在内存中还是放在磁盘上"的数据库部分.
我们的模型已增长到几千兆字节.现在这都是在内存中完成的,这意味着我们正在推动JVM达到几千兆字节.它目前全部存储在一个平面XML文件中,使用xstream进行序列化和反序列化,并使用内置的gzip库中的Java进行压缩.当我们的模型保持在100MB以下时,这种方法运行良好,但现在它的大于它成为一个问题.
松散地说,模型可以分解为
我想做的是有一些符合guid - > run-model的地图界面的东西.这个迷你数据库将保留这些对象的平面表.在我们的实验模型中,我们将使用guid列表替换运行模型列表,并在应用程序层添加对此映射的get调用,这将把它从磁盘中拉出并进入内存.
这意味着我们可以使用XML(我非常满意)保持程序的配置,并在DBMS中保留一个大数据表,这将使我们不会消耗多GB的内存.在程序启动和退出时,我可以从存档格式加载和卸载我们模型的两个部分(XML中的配置部分和数据库格式的运行模型).
我对这一点感觉很好,并且认为我可以用一些X-Stream的XML检查策略和自定义地图实现来实现它,但是在我的脑海中有一种声音告诉我我应该找到一个库来代替.
我应该自己动手还是有一个足够小的数据库来满足这个要求?
多谢你们,
-Geoff
我的问题归结为使用带有两个字符串参数的@Assisted到工厂.问题是因为Guice将类型视为参数的识别机制,两个参数都是相同的,我得到一个配置错误.
一些代码:
public class FilePathSolicitingDialog {
//... some fields
public static interface Factory {
public FilePathSolicitingDialog make(Path existingPath,
String allowedFileExtension,
String dialogTitle);
}
@Inject
public FilePathSolicitingDialog(EventBus eventBus,
SelectPathAndSetTextListener.Factory listenerFactory,
FilePathDialogView view,
@Assisted Path existingPath,
@Assisted String allowedFileExtension,
@Assisted String dialogTitle) {
//... typical ctor, this.thing = thing
}
// ... methods
}
Run Code Online (Sandbox Code Playgroud)
问题在于双字符串参数.
我尝试用单独的@Named("酌情")注释标记每个字符串,但这只会导致更多的配置错误.从这些错误的声音,他们不希望在工厂类上绑定注释,所以我没有尝试自定义绑定注释.
简单而嘈杂的解决方案是创建一个简单的参数类来包含这三个辅助值,并简单地注入:
public static class Config{
private final Path existingPath;
private final String allowedFileExtension;
private final String dialogTitle;
public Config(Path existingPath, String allowedFileExtension, String dialogTitle){
this.existingPath = …Run Code Online (Sandbox Code Playgroud) 我希望使用 Prolog 生成满足约束系统的随机向量。
例如,我们的用户可能会在运行时向我们的软件提供以下信息:
给定一个向量<x1, x2, x3, ... x30>,我们可能有两个约束:
x1 > x2 + x3 + x4
x5 <= sin(x6 + x7)
Run Code Online (Sandbox Code Playgroud)
我想做的是生成一个大致遵循以下形式的 Prolog 程序:
:- random(0.0, 1.0, X1)
:- random(0.0, 1.0, X2)
#...
# its also concievable that the bounds are different than 0 to 1
:- random(0.0, 1.0, X30)
clp(r) :- constraints {
X1 > X2 + X3 + X4,
X5 <= sin(X6 + X7)
}
?- [ X1, X2, X3, X4, ... X30 ]
Run Code Online (Sandbox Code Playgroud)
这将在 30 …
我正在为我的 CI 编写一些脚本,我注意到我在断言过滤器的唯一性方面做得不好。例如,一个脚本假设
$availableZip = $(Get-ChildItem -Path .\ -Filter "*SomeName*.zip" -Recurse).FullName
Run Code Online (Sandbox Code Playgroud)
将提供一个唯一的条目,但它可能不提供任何条目,也可能提供多个条目。
这当然可以通过一些 If-Else 检查在下游处理,但我想做的是优雅地推动 PowerShell 为我生成一个错误,例如
$availableZip = $(Get-ChildItem -Path .\ -Filter "*SomeName*.zip" -Recurse | Where -Single).FullName
Run Code Online (Sandbox Code Playgroud)
这样Where -Single会抛出某种SetIsEmptyExceptionor SetContainsMultipleElementsException,所有 PowerShell 装备都专门指向这一行,甚至可能包括重复的成员。
Where-Object : value 包含多个元素,其中只允许一个,可用元素: firstDirectory\SomeSoftware.zip, Another-SomeSoftware.zip at C:\Users\geoff\Code\Project\MyScript.ps1:33 char:73
+ 。 ..ChildItem -Path .\ -Filter " SomeSoftware .zip" -recurse | Where -Single).FullName
+ ~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Get-ChildItem], SingletonSetContainsMultipleElementsException
+fullyQualifiedErrorId : TooManyElements,Microsoft.PowerShell.Commands.WhereObjectCommand
有没有内置的方法可以让我做到这一点?是否有一些我可以使用的 PowerShell 技巧,或者我应该使用一个带有私有函数的小模块(如果是这样,最优雅的实现是什么?)
java ×2
clp ×1
clpr ×1
constraints ×1
database ×1
guice ×1
linq ×1
nosql ×1
performance ×1
powershell ×1
prolog ×1
random ×1