我就像许多人正在考虑在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仅通过明确定义的范围支持分片/分块,并且我的想法不起作用.是真的吗?
在对我的库中的代码进行基准测试时,我发现了非常有趣且令人失望的发现 - 看起来类方法的调用比相同独立函数的调用慢 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) 我正在尝试"最新和最好的"LESS版本,它似乎在rhino命令行版本中不起作用.我做了以下
从命令行运行以下命令
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.org或https://github.com/less/less.js中找不到相关的帮助.后来的jut说:"stackoverflow.com是一个获得Less的答案的好地方."
只是一个理论问题,我目前没有实际的用例.
假设我的API接受函数引用作为参数,我想通过'::'语法直接从代码中提取它,或者通过反射收集匹配函数,存储在某些Map中并有条件地调用.
有可能以编程方式转换method成Consumer<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) 我有以下虚拟测试课程
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) 我无法理解这里出了什么问题
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 说如下:
Run Code Online (Sandbox Code Playgroud)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 ? …
我正在尝试在 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' - 已接受,但同样没有明确的推理。
我正在尝试创建自己的 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 中存在哪些命令?
我试图在 android 应用程序中使用 Java11 API,但未能编译它。
失败的步骤:
app/build.gradle并设置sourceCompatibility JavaVersion.VERSION_11+targetCompatibility JavaVersion.VERSION_11FirstFragment.java:3: error: package android.os does not exist
Run Code Online (Sandbox Code Playgroud)
所以问题是——我做错了什么?构建项目缺少什么sourceCompatibility JavaVersion.VERSION_11?
我正在尝试迁移/更新我的项目以使用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实现独立功能.
我在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的交叉帖子
我在堆栈溢出中尚未讨论的条件中遇到"不兼容类型"编译器错误(例如,为什么这个通用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)