小编Xtr*_*der的帖子

通过ObjectID进行分片,这是正确的方法吗?

我就像许多人正在考虑在Mongo中对我的收藏品进行分类的正确方法.主要问题是 - 自动分片是如何工作的?

官方文档称 - "MongoDB通过自动分片(分区)架构进行水平扩展"和"要对分区进行分区,我们指定了一个分片键模式." 注意"为集合选择正确的分片键很重要":).
http://www.mongodb.org/display/DOCS/Sharding+Introduction#ShardingIntroduction-ShardKeys
http://www.mongodb.org/display/DOCS/Choosing+a+Shard+Key

现在的问题是 - "这是正确的密钥"(通过ObjectID进行分片)?

db.runCommand({ shardcollection : "test", key : { _id : 1 }})
Run Code Online (Sandbox Code Playgroud)

Mongo内部会发生什么?在这种情况下,Mongo如何将数据拆分为块?假设我最初拥有10ml带有2个分片服务器的记录 - 当我想在集合达到20mln记录时再添加2个分片服务器时,Mongo方面会发生什么?我无法在Mongo相关来源的任何地方找到这种级别的详细信息.

考虑到自生生_id及其结构的随机性,

... http://www.mongodb.org/display/DOCS/Object+IDs ......

我将通过最低有效字节(rtl顺序)进行分片,其中块分为2-3个字节的值 - 这将提供简单的方法来分片2 ^ N的分片服务器--2,4,8,...,256个分片服务器在每个分片上具有或多或少的均匀负载,并且具有最少的所需配置.据我所知,Mongo仅通过明确定义的范围支持分片/分块,并且我的想法不起作用.是真的吗?

mongodb

7
推荐指数
2
解决办法
6867
查看次数

调用 javascript 类方法比相同函数慢 20-40 倍

在对我的库中的代码进行基准测试时,我发现了非常有趣且令人失望的发现 - 看起来类方法的调用比相同独立函数的调用慢 20-40 倍。

简而言之,对我来说,这意味着“为了更好的性能,不要通过 JS 类实现非常频繁调用的功能”。通过“命名空间对象”访问库函数也会带来性能损失。这个问题可能会影响设计库的方法。

我觉得我错过了一些东西。如果下面的性能测试有问题,请告诉我。

以下是结果摘要,Windows + intel 9600k(nodejs 14、Chrome 86、FF82)

          ops/s in:   node14 slow   Ch86 slow   FF82 slow
function(a, b)          4195        3934        1625
namespace.method(a, b)   210 x20    2702 x1.5   1305 x1.24
instance.method(a, b)    126 x33     162 x24      89 x18
prototype.method(a, b)   105 x40     154 x25      57 x28
class.method(a, b)       110 x38     153 x25      57 x28
Run Code Online (Sandbox Code Playgroud)

https://benchmarkjs.com/的测试脚本,部分内容也复制/粘贴到https://jsbench.me/以进行浏览器内测试。

const Benchmark = require('benchmark');
const suite = new Benchmark.Suite("function-vs-method");
const nCycles = 1000000;

suite …
Run Code Online (Sandbox Code Playgroud)

javascript performance

7
推荐指数
1
解决办法
2351
查看次数

如何从命令行正确执行lessc-rhino-1.6.3.js

我正在尝试"最新和最好的"LESS版本,它似乎在rhino命令行版本中不起作用.我做了以下

  1. 从这里获取最新的犀牛https://github.com/downloads/mozilla/rhino/rhino1_7R4.zip
  2. 从这里获取最新的less-rhino-1.6.3.js https://github.com/less/less.js/tree/master/dist
  3. 从命令行运行以下命令

    java -jar js.jar less-rhino-1.6.3.js text.less text.css
    要么
    java -jar js.jar less-rhino-1.6.3.js lessc-rhino-1.6.3.js text.less text.css

结果是 - "默默地没有".当试图运行'以前的最新版本'时 - 它运行正常没有问题

java -jar js.jar less-rhino-1.5.1.js text.less text.css

输出是

Written to text.css

关于最新的less-rhino.js我缺少什么?我在http://lesscss.orghttps://github.com/less/less.js中找不到相关的帮助.后来的jut说:"stackoverflow.com是一个获得Less的答案的好地方."

javascript rhino less

6
推荐指数
1
解决办法
1536
查看次数

以编程方式创建Java8函数引用

只是一个理论问题,我目前没有实际的用例.

假设我的API接受函数引用作为参数,我想通过'::'语法直接从代码中提取它,或者通过反射收集匹配函数,存储在某些Map中并有条件地调用.

有可能以编程方式转换methodConsumer<String>

Map<String, Consumer<String>> consumers = new HashMap<>();
consumers.put("println", System.out::println);

Method method = PrintStream.class.getMethod("println", String.class);
consumers.put("println", makeFunctionReference(method));
...
myapi.feedInto(consumers.get(someInput.getConsumerId()));
Run Code Online (Sandbox Code Playgroud)

更新:

虽然目前提供的答案不满足于解决方案,但在得到关于LambdaMetaFactory我试图编译此代码的提示之后

public class TestImpl {
    public static void FnForString(String arg) {}
}

public class Test {
    void test() {
        List<String> strings = new ArrayList<>();
        Consumer<String> stringConsumer = TestImpl::FnForString;

        strings.stream().forEach(stringConsumer);
        strings.stream().forEach(TestImpl::FnForString);
        stringConsumer.accept("test");
    }
}
Run Code Online (Sandbox Code Playgroud)

在将只有Test类送入CFR反编译器后,我得到了以下内容:

public class Test {
    void test() {
        ArrayList strings = new ArrayList();
        Consumer<String> stringConsumer = 
            (Consumer<String>)LambdaMetafactory.metafactory( …
Run Code Online (Sandbox Code Playgroud)

java java-8 method-reference

5
推荐指数
1
解决办法
892
查看次数

TestNG + Gradle + @Test(dependsOnMethods)的“未找到给定包含的测试”

我有以下虚拟测试课程

package my.test;

import org.testng.annotations.*;

public class NgScenario {

    public static void trace(String msg) {
        System.err.println(msg);
    }

    @BeforeClass
    public void init() {
        trace("-- NgScenario");
    }

    @AfterClass
    public void shutdown() {
        trace("-- NgScenario");
    }

    @Test(dependsOnMethods = {"step2"})
    public void step1() throws Exception {
        trace("-- step1");
    }

    @Test
    public void step2() throws Exception {
        trace("-- step2");
    }

    @Test(dependsOnMethods = {"step2"})
    public void step3() throws Exception {
        trace("-- step3");
    }
}
Run Code Online (Sandbox Code Playgroud)

build.gradle

apply plugin: 'java'

repositories {
    mavenLocal()
    mavenCentral()
    jcenter()
}

dependencies …
Run Code Online (Sandbox Code Playgroud)

java testng gradle

5
推荐指数
1
解决办法
2431
查看次数

不兼容的类型:SomeX 无法转换为 CAP#1

我无法理解这里出了什么问题

import java.util.*;

class Main {
    private static class SomeX {}

    void doSomethingWithX(SomeX someX) {
        Collection<? extends SomeX> colectionOfX = new ArrayList<>();
        colectionOfX.add(someX);
    }
}
Run Code Online (Sandbox Code Playgroud)

javac 说如下:

  Main.java:8: error: method add in interface Collection<E> cannot be applied to given types;
          colectionOfX.add(someX);
                      ^
    required: CAP#1
    found: SomeX
    reason: argument mismatch; SomeX cannot be converted to CAP#1
    where E is a type-variable:
      E extends Object declared in interface Collection
    where CAP#1 is a fresh type-variable:
      CAP#1 extends SomeX from capture of ? …
Run Code Online (Sandbox Code Playgroud)

java generics

5
推荐指数
1
解决办法
9231
查看次数

MongoCollection.findOneAndUpdate() 中的 $inc 与 $setOnInsert

我正在尝试在 mongodb 中实现一个'server-side counter-versioned'项目并尝试执行以下操作 /*使用 Java API */

Document dbDoc = dbCollection.findOneAndUpdate(
        new Document("_id", "meta"), 
        new Document("$inc", new Document("version", 1))
             .append("$setOnInsert", new Document("version", 0)),
        new FindOneAndUpdateOptions().upsert(true)
                                     .returnDocument(ReturnDocument.AFTER));
Run Code Online (Sandbox Code Playgroud)

假设的逻辑很简单:如果数据库中没有记录 - 从零开始计数(并且使用全新的新对象),否则 - 递增计数器。

代码示例失败并显示:'Cannot update 'version' and 'version' at the same time'

我的假设是,在“upsert”模式下,当没有找到匹配的项目时,mongo 应该只使用“$setOnInsert” - 但它以其他方式工作。

是否可以在一个原子mongoDB 调用中实现这样的操作?


PS:关于 findOneAndUpdate() 和 upsert() 的MongoDB 文档很模糊 - 至少我无法从他们的描述中理解为什么会出现这个错误。

这里也有类似的问题 - findAndModify 失败并出现错误:“无法同时更新 'field1' 和 'field1' - 已接受,但同样没有明确的推理。

mongodb

5
推荐指数
1
解决办法
3685
查看次数

如何在 Gradle 项目中创建 Karaf shell 命令

我正在尝试创建自己的 Karaf shell 命令,并且我愿意使用 Gradle 来执行此操作,因为整个项目都在 Gradle 上。

到目前为止,我找到的唯一相关文档是 http://karaf.apache.org/manual/latest/#_shell_commands ,它说

See [examples/karaf-command-example] to add your own shell commands.
Run Code Online (Sandbox Code Playgroud)

示例是使用 MAVEN 创建的,并且绝对没有描述那里发生了什么魔法以及结果包中应该出现什么,以便我可以在 Gradle 中重现它。

有人可以告诉如何在 Gradle 项目中实现相同的目标吗?
Karaf 如何识别 Bundle 中存在哪些命令?

gradle karaf

5
推荐指数
1
解决办法
141
查看次数

android + sourceCompatibility JavaVersion.VERSION_11:错误:包 android.os 不存在

我试图在 android 应用程序中使用 Java11 API,但未能编译它。

失败的步骤:

  1. 使用当前版本的 Android Studio 4.1.2 - 生成虚拟项目“Basic Activity”
  2. 构建并启动 - 到目前为止一切正常
  3. 打开app/build.gradle并设置sourceCompatibility JavaVersion.VERSION_11+targetCompatibility JavaVersion.VERSION_11
  4. “项目结构” > “SDK 位置” > “JDK 位置”中- 选择 JDK 11 的路径
  5. 构建...失败并出现以下错误
FirstFragment.java:3: error: package android.os does not exist
Run Code Online (Sandbox Code Playgroud)

所以问题是——我做错了什么?构建项目缺少什么sourceCompatibility JavaVersion.VERSION_11

android java-11

5
推荐指数
1
解决办法
7810
查看次数

将Java实现的函数添加到Nashorn的全局范围中

我正在尝试迁移/更新我的项目以使用Rhino的Nashorn.我有一些用Java实现的全局实用程序函数,并添加到目标脚本引擎的全局范围内,典型的例子是log(message).

在Rhino中,它是通过实现的

public static class LogFunction extends org.mozilla.javascript.BaseFunction {
    @Override
    public Object call(Context cx, Scriptable scope, Scriptable thisObj, Object[] args) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

其实例添加到目标范围.在Nashorn的情况下需要做些什么?我找不到如何为Nashorn实现独立功能.

nashorn

3
推荐指数
1
解决办法
2428
查看次数

依赖于包的OSGI包的自然启动顺序是什么(在Karaf下)?

我在2.2.8版本的Karaf上遇到了问题(很可能也是早期版本).

我将使用Karaf来使用动态部署的bundle来托管系统.捆绑包由用户部署,我不知道他们是谁.

我希望BundleActivator.start()的顺序与bundle之间的包依赖性(导入/导出包的依赖性)完全对应,并计划在bundle1将要启动之前假设bundle0将被完全初始化是可以安全的. .但事实并非如此 - 似乎BundleActivator.start()以"随机"顺序调用,并忽略了bundle之间的包依赖关系.

示例用例,我有3个库

test-lib0 - defines testlib0.ITestRoot, exports testlib0 package 
test-lib1 - defines testlib1.TestRoot implements ITestRoot,  exports testlib1 package 
test-lib2 - uses both libs, ITestRoot and TestRoot 
Run Code Online (Sandbox Code Playgroud)

当Karaf启动时,我在控制台中看到以下示例输出

karaf@root> TestLib1Activator.start() 
TestLib2Activator.start() 
        ITestRoot: interface com.testorg.testlib0.ITestRoot - 16634462 
        TestRoot:  class com.testorg.testlib1.TestRoot - 21576551 
TestLib0Activator.start() 
Run Code Online (Sandbox Code Playgroud)

但我希望它应该始终按此顺序排列

TestLib0Activator.start() 
TestLib1Activator.start() 
TestLib2Activator.start() 
        ITestRoot: interface com.testorg.testlib0.ITestRoot - 16634462 
        TestRoot:  class com.testorg.testlib1.TestRoot - 21576551 
Run Code Online (Sandbox Code Playgroud)

我正在附加测试样本项目.测试用例:在"mvn install"之后将jar从./deploy文件夹移动到Karaf的同一文件夹,跟踪消息应该出现在控制台中.(注意:它可能在第一次尝试时正常工作,再尝试一次:))

样本测试项目 http://karaf.922171.n3.nabble.com/file/n4025256/KarafTest.zip

注意:这是来自http://karaf.922171.n3.nabble.com/What-is-the-natural-start-order-for-dependent-bundle-td4025256.html的交叉帖子

osgi apache-karaf

2
推荐指数
1
解决办法
1900
查看次数

Java泛型和不兼容的类型:编译器中的错误?

我在堆栈溢出中尚未讨论的条件中遇到"不兼容类型"编译器错误(例如,为什么这个通用java代码不会编译?).

我的期望很简单 - 我正在调用一个模板化的方法,它不使用包含类的任何"泛型"类,因此它应该从方法参数中提取模板参数的类型,这应该在所有情况下编译 - 但我得到"不兼容的类型"编译错误.

我注意到修复问题的奇怪方法 - 在方法参数中将" <?extends Data> "添加到泛型数据类型.它如何改变编译器逻辑?

在我的理解中 - 应该没有区别,因为(1)DataContainer类的模板参数不用于方法调用和(2)限制" <TData extends Data> "已经定义了最小的基础对象类 - 数据 - 因此它应该是编译没有参数的模板时自动假设.

public void processData(DataContainer<? extends Data> c) {
Run Code Online (Sandbox Code Playgroud)

(可以使用显式类型转换,但我相信这里多余)

DummyContextClass dcc = (DummyContextClass)c.getContext(DummyContextClass.class);
Run Code Online (Sandbox Code Playgroud)

复制/粘贴代码

public class Test {

    public static class Data {
    }

    public static class DataContainer<TData extends Data> {
        public final TData Data;
        private final Map<String, Object> contexts = new HashMap<>();

        public DataContainer(TData data) {
            Data = data;
        }

        public <T> T getContext(Class<T> type) …
Run Code Online (Sandbox Code Playgroud)

java generics

0
推荐指数
1
解决办法
2130
查看次数