Elasticsearch没有"读一致性"参数(如Cassandra).但它具有" 写一致性 "和" 读取偏好 ".
文档说明了关于写一致性的以下内容
写入一致性
为了防止写入发生在网络分区的"错误"端,默认情况下,只有当仲裁(> replicas/2 + 1)活动分片可用时,索引操作才会成功.可以使用action.write_consistency设置逐个节点地覆盖此缺省值.要更改此操作的每个操作,可以使用一致性请求参数.有效写入一致性值是一个,仲裁和所有.
注意,对于副本数量为1(总共2个数据副本)的情况,如果1个副本(主要副本)可以执行写入,则默认行为是成功的.
索引操作仅在复制组中的所有活动分片已将文档编入索引(同步复制)后才返回.
我的问题是关于最后一段:
索引操作仅在复制组中的所有活动分片已将文档编入索引(同步复制)后才返回.
如果write_consistency=quorum
(默认)和所有分片都是活动的(没有节点故障,没有网络分区),那么:
1)一旦分片的法定数量完成索引,索引操作是否会立即返回?(即使所有分片都是活动/活动的)
2)或者当所有实时/活动分片完成索引时,索引操作是否会返回?(即仅在出现故障/超时的情况下才考虑仲裁)
在第一种情况下 - 读取可能是最终一致的(可能会得到陈旧的数据),写入更快.
在第二种情况下 - 读取是一致的(只要没有网络分区),写入速度较慢(因为它等待较慢的分片/节点).
有谁知道它是如何工作的?
我想知道的另一件事 - 为什么' preference'param(在get/search请求中)的默认值是,randomized
但是没有 _local
(我想这一定是效率更高)
我想确保根据Java内存模型正确理解'有效不可变对象'的行为.
假设我们有一个可变类,我们希望将其发布为有效的不可变类:
class Outworld {
// This MAY be accessed by multiple threads
public static volatile MutableLong published;
}
// This class is mutable
class MutableLong {
private long value;
public MutableLong(long value) {
this.value = value;
}
public void increment() {
value++;
}
public long get() {
return value;
}
}
Run Code Online (Sandbox Code Playgroud)
我们执行以下操作:
// Create a mutable object and modify it
MutableLong val = new MutableLong(1);
val.increment();
val.increment();
// No more modifications
// UPDATED: Let's say for this example we …
Run Code Online (Sandbox Code Playgroud) 我有以下java类
@XmlRootElement
@XmlSeeAlso(DataClass.class)
public static class EnvelopeClass<T> {
@XmlElement
public String version;
@XmlElement
public T data;
EnvelopeClass() {
}
EnvelopeClass(String version, T data) {
this.version = version;
this.data = data;
}
}
@XmlRootElement
public static class DataClass {
@XmlElement
public String name;
DataClass() {
}
DataClass(String name) {
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
我正在创建它的实例并将它编组到json
EnvelopeClass<DataClass> dataClassEnvelopeClass = new EnvelopeClass<DataClass>("1.0", new DataClass("myName"));
Run Code Online (Sandbox Code Playgroud)
我有下一个结果:
{"version":"1.0","data":{"@type":"dataClass","name":"myName"}}
Run Code Online (Sandbox Code Playgroud)
我不想在json "@type":"dataClass"中有类型类型信息,换句话说我想要下一个结果:
{"version":"1.0","data":{"name":"myName"}}
Run Code Online (Sandbox Code Playgroud)
当EnvelopeClass没有Generics时,我得到了这个结果.
有没有办法做到这一点?
Intellij Idea为每个Android模拟器显示compatible ="no".我尝试了不同api级别的模拟器.同时我的NexusOne兼容="true".
有谁知道它如何检查设备/模拟器的兼容性?
我在清单中有下一个设置:
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="4"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_APN_SETTINGS"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:anyDensity="true"
/>
Run Code Online (Sandbox Code Playgroud)