我还在试图找出_doc在elasticsearch中的含义?从文档中,我发现它的两个用途是:
在排序时,建议_doc更好,因为_doc排序的好处是,弹性搜索在移动到下一页时可以有效地跳到下一个匹配的文档(它将简单地忽略所有文档ID小于最后退回的文件). 资源
有人可以准确地告诉_doc究竟是什么?
有人告诉我,对于I/O绑定的应用程序,非阻塞I/O会更好.对于CPU绑定应用程序,阻塞I/O要好得多.我找不到这种说法的理由.试过谷歌,但很少有文章只涉及这个话题没有太多细节.有人可以提供深度理由吗?
有了这个,我想清楚自己,非阻塞I/O的缺点是什么.
通过另一个线程会后在这里,一个原因,我可能涉及在外面是如果I/O过程是沉重得那么只有我们使用非阻塞I/O可以看到显著的性能提升.它还指出,如果I/O操作的数量很大(典型的Web应用程序场景),其中有许多请求寻找I/O请求,那么我们也看到使用非阻塞I/O的重大改进.
因此,我的问题归结为以下列表:
在CPU密集型应用程序的情况下,最好是启动线程池(或scala的executionContext)并在线程池的线程之间划分工作.(我想它肯定比产生自己的线程和手动划分工作更有优势还使用asyn未来概念,甚至可以使用回调返回CPU密集型工作,从而避免与阻塞多线程相关的问题?).此外,如果存在足够快的I/O,则使用线程池本身的线程上的阻塞原则来执行I/O. 我对吗?
在技术上使用非阻塞I/O实际上有什么缺点或开销?如果I/O足够快或者需要的I/O操作非常少,为什么我们看不到使用非阻塞I/O会带来多大的性能提升?最终它是处理I/O的操作系统.无论I/O的数量是大还是小,让操作系统处理这种痛苦.是什么让这里有所不同.
升级到ES 1.3.2后,我遇到以下问题:
1)启动时出错:
[2014-08-26 11:10:20,285][ERROR][bootstrap ] {1.3.2}: Initialization Failed ...
1) NoSuchMethodError[org.elasticsearch.discovery.zen.ZenDiscovery.(Lorg/elasticsearch/common/settings/Settings;Lorg/elasticsearch/cluster/ClusterName;Lorg/elasticsearch/threadpool/ThreadPool;Lorg/elasticsearch/transport/TransportService;Lorg/elasticsearch/cluster/ClusterService;Lorg/elasticsearch/node/settings/NodeSettingsService;Lorg/elasticsearch/cluster/node/DiscoveryNodeService;Lorg/elasticsearch/discovery/zen/ping/ZenPingService;Lorg/elasticsearch/Version;)V]2) IllegalStateException[This is a proxy used to support circular references involving constructors. The object we're proxying is not constructed yet. Please wait until after injection has completed to use this object.]
Run Code Online (Sandbox Code Playgroud)
2)当我尝试将cloud-aws插件升级到2.3.0版(与ES 1.3兼容)时,我得到:
`Exception in thread "main" java.lang.UnsupportedClassVersionError: org/elasticsearch/plugins/PluginManager : Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:643)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
Could …Run Code Online (Sandbox Code Playgroud) 我正在编写一段代码,其中有一个 String[] 和一个接受这个 String[] 并返回 Byte[] 的方法,该方法维护字符串-字节对,其中很少有 Byte 可以为空。最终,我必须转换 Byte 并从 String[] 中获取 key 作为 string 和 value 作为转换的返回的映射。这就是我在 Java 8 流中实现相同的方式:
IntStream.range(0, productReferences.length)
.filter(index -> (null!= productsPrice[index])).boxed()
.collect(Collectors.toMap(position -> productReferences[position],
position ->callSomeMethod(productsPrice[position])));
Run Code Online (Sandbox Code Playgroud)
其中 productReference 是 String[] 和 productsPrice[] 是 Byte[] 数组。
现在的问题是 IntStream.boxed() 方法。在内部,它将 int 装箱为 Integer 以便它返回一个 Stream,我认为这是一个成本更高的操作。
其他方法是使用 java for 循环
for(int i=0;i<productReferences.length; i++){
if (productsPrice[index]==null) continue;
//other code
}
Run Code Online (Sandbox Code Playgroud)
处理这种情况的最佳方法是什么?我理解创建 IntStream 的原因,但是如果我实际上可以在没有 boxed() 方法的 collect 方法中使用索引从而避免装箱?