您可以采用哪些流行技术来为内存数据结构添加持久性(即)如果进程崩溃,您可以保留该数据结构上所有先前执行的操作?
如果我的数据结构只涉及元组列表,那么我只是将它们存储在SQL DB中,这将免费提供耐用性.但是如果我的数据结构是图形或树呢?
我能想到的一件事是将所有操作显式记录到磁盘(仅附加日志),并在发生崩溃时重播日志以保留以前的状态.如果日志变得太大,那么将会有压缩步骤.我猜这是数据库引擎在内部为持久性做的事情(检查点是这个过程的名称)?
顺便提一下,这不是整个数据集不适合内存的情况.
您可能知道,浏览器的安全模型不允许从http://www.example.com页面加载的脚本发出跨域请求(除了www.example.com之外的任何其他域都没有AJAX调用).Javascript文件本身可能是从一个不同的域(www.javascript.com/myscript.js)提供的,这是无关紧要的.这是同源政策.
Flash也有类似的东西吗?但Flash是否将原点视为加载 .swf文件的HTML页面,或者源是为.swf文件提供服务的域?
因此http://www.example.com从http://www.swf.com/myflash.swf加载.swf文件.现在.swf只能从www.example.com或www.swf.com加载资源?我假设在example.com或swf.com上没有设置跨域文件.
使用分布式 Erlang 在所有节点之间创建一个网状网络,但它不能很好地扩展到数百个节点。riak-core 如何处理这个问题?
它不使用分布式Erlang(设置-connect_all = false并使用自定义协议在riak节点之间进行通信)吗?粗略地看一下代码,他们似乎并没有这样做。
如果使用a执行Runnable ThreadPoolExecutor,并且如果此Runnable修改了某些共享状态,是否可以保证在将可运行的池提交到池的原始线程中是否可以看到对共享状态的这些更改?假设只有一个作家共享州和一个读者.我知道当你使用ExecutorService它返回a时Future,做一个Future.get()将保证可见性.
class State {
private int x;
public State(int y) { x = y; }
public void setX(int y) { x = y; }
public int getX() { return x; }
}
main() {
threadPool = new ThreadPoolExecutor(8, 16, 100, TimeUnit.SECONDS, new ArrayBlockingQueue(...))
final State myState = new State(1);
threadPool.execute(new Runnable() {
public void run() {
myState.setX(50);
}
});
while (true) {
if (myState.getX() == 50) {
break;
}
sleep();
} // …Run Code Online (Sandbox Code Playgroud)