我们使用mongo db在生产数据库中存储某些记录.
我们看到我们的记录"_id" : { "$oid" : "50585fbcb046b2709a534502"}在生产数据库中,而我们看到与"_id" : ObjectId(" 50585fbcb046b2709a534502 ")qa数据库中相同的记录.对于我们"ld" : { "$date" : "2011-12-03T17:00:00Z"}在prod数据库中看到的日期,而"ld" :ISODate("2011-12-03T17:00:00Z")在qa数据库中.我们已经在qa环境中成功测试了我们的查询,但担心它可能会在生产中失败
1)我的java查询是否可以在prod&qa上无缝地工作?(我使用morphia apis来查询)2)它们内部是否以相同的方式存储?
我试图使用Hibernate(JPA)在5秒内在MYSQL表中插入100,000行.我已经尝试过hibernate提供的每一个技巧,但仍然不能超过35秒.
第一次优化:我开始使用IDENTITY序列生成器,这导致插入60秒.我后来放弃了序列生成器并开始@Id自己通过阅读MAX(id)和使用AtomicInteger.incrementAndGet()自己分配字段来分配字段.这将插入时间减少到35秒.
第二次优化:我通过添加启用了批量插入
<prop key="hibernate.jdbc.batch_size">30</prop>
<prop key="hibernate.order_inserts">true</prop>
<prop key="hibernate.current_session_context_class">thread</prop>
<prop key="hibernate.jdbc.batch_versioned_data">true</prop>
到配置.我很震惊地发现批量插入绝对没有减少插入时间.现在还有35秒!
现在,我正在考虑尝试使用多个线程插入.任何人有任何指针?我应该选择MongoDB吗?
下面是我的配置:1.Hibernate配置`
<bean id="entityManagerFactoryBean" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="com.progresssoft.manishkr" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
<prop key="hibernate.jdbc.batch_size">30</prop>
<prop key="hibernate.order_inserts">true</prop>
<prop key="hibernate.current_session_context_class">thread</prop>
<prop key="hibernate.jdbc.batch_versioned_data">true</prop>
</props>
</property>
</bean>
<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource"
id="dataSource">
<property name="driverClassName" value="${database.driver}"></property>
<property name="url" value="${database.url}"></property>
<property name="username" value="${database.username}"></property>
<property name="password" value="${database.password}"></property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" …Run Code Online (Sandbox Code Playgroud) 输入的要求是输入美国的邮政编码,因此它将是5个整数,但它只是应用程序的一堆字符串.标记是HTML5.
input type="number"因为01234将被转换为1234,对于邮政编码来说无赖!input type="tel"数字键盘打开,但我认为邮政编码实际上是一个文本,因此我应该使用input type="text"其他一些过滤器强制数字键盘打开,这就是我做的,我尝试使用pattern="[0-9]*"但这似乎只适用于Safari浏览器(苹果设备)并打开数字键盘,但在Android设备(Chrome浏览器)上打开文本键盘而不是数字键盘.因此,input type="text" pattern="[0-9]*"适用于iPhone iPad的Safari浏览器上,但也不会在Android设备上的Chrome浏览器.
任何人都知道如何input type="text"使用Chrome浏览器在Android设备上使用数字键盘打开?或者' input type="tel"'是在所有设备上普遍打开数字键盘的唯一方法吗?
类似的问题有时回到电话:文本输入的数字键盘
html5 android google-chrome mobile-safari android-softkeyboard
所以git fetch概念上意味着从远程分支获取东西.现在git merge mybranch意味着将mybranch合并到当前分支中.我看不出两者有什么区别?我遗漏的那种鲜明的概念"在眼前"的区别是什么?
我正在创建15个可调用任务,并提交它们:
List<Future<MyResult>> futures = new ArrayList<Future<MyResult>>();
List<MyResult> myResults = new ArrayList<MyResult>();
for(int i = 1; i <= 15; i++){
Callable<MyResult> task = new MyProcessor(//parameters);
Future<MyResult> future = executorService.submit(task);
futures.add(future);//used to iterate over to call get() to collect results in next for loop
}
Run Code Online (Sandbox Code Playgroud)
然后我收集了15个MyResult对象:
for(Future<MyResult> future : futures){
try {
MyResult myResult = future.get();
processorResults.add(myResult);
} catch (InterruptedException e) {
//...
} catch (ExecutionException e) {
//...
}
}
Run Code Online (Sandbox Code Playgroud)
问题是:不是从get()方法返回所有15个MyResult对象,我有时会得到少于15个对象.有时12有时10有时甚至更小,有时甚至15.
我的印象是,get()方法是一个阻塞调用,并且将等待所有15个线程返回相应的结果,但看起来我错过了其中一些并继续前进.我做错了什么?我没有收集结果/正确等待结果?当从任何MyProcessor任务抛出ERROR时会发生这种情况吗?