我需要从数据库中导出大量数据.这是代表我的数据的类:
public class Product{
...
@OneToMany
@JoinColumn(name = "product_id")
@Cascade({SAVE_UPDATE, DELETE_ORPHAN})
List<ProductHtmlSource> htmlSources = new ArrayList<ProductHtmlSource>();
Run Code Online (Sandbox Code Playgroud)
...}
ProductHtmlSource - 包含我实际需要导出的大字符串.
由于导出数据的大小比JVM内存大,我正在按块读取数据.像这样:
final int batchSize = 1000;
for (int i = 0; i < 50; i++) {
ScrollableResults iterator = getProductIterator(batchSize * i, batchSize * (i + 1));
while (iterator.getScrollableResults().next()) {
Product product = (Product) iterator.getScrollableResults().get(0);
List<String> htmls = product.getHtmlSources();
<some processing>
}
Run Code Online (Sandbox Code Playgroud)
}
代码getProductIterator:
public ScrollableResults getProductIterator(int offset, int limit) {
Session session = getSession(true);
session.setCacheMode(CacheMode.IGNORE);
ScrollableResults iterator …Run Code Online (Sandbox Code Playgroud) 我想在批处理文件中调用java类.我怎么称呼.可以告诉我任何调用类文件的命令
谢谢克里希纳
我正在设计一个系统,该系统应分析大量用户事务并生成汇总度量(如趋势等).系统应该快速,稳健和可扩展.System是基于java的(在Linux上).
数据从生成用户事务的日志文件(基于CSV)的系统到达.系统每分钟生成一个文件,每个文件包含不同用户的事务(按时间排序),每个文件可能包含数千个用户.
CSV文件的示例数据结构:
10:30:01,用户1,...
10:30:01,用户1,...
10:30:02,用户78,...
10:30:02,用户2,......
10: 30:03,用户1,...
10:30:04,用户2,...
...
我计划的系统应该处理文件并实时执行一些分析.它必须收集输入,将其发送到多个算法和其他系统,并将计算结果存储在数据库中.数据库不保存实际输入记录,而只保留有关事务的高级聚合分析.例如趋势等
我计划使用的第一个算法要求最佳操作至少10个用户记录,如果5分钟后找不到10条记录,它应该使用可用的数据.
我想使用Storm来实现,但我更愿意尽可能地将这个讨论留在设计层面.
系统组件列表:
每分钟监视传入文件的任务.
读取文件,解析文件并使其可用于其他系统组件和算法的任务.
用于缓冲用户的10条记录的组件(不超过5分钟),当收集10条记录或5分钟时,是时候将数据发送到算法进行进一步处理.由于要求为算法提供至少10条记录,我想到使用Storm Field Grouping(这意味着为同一个用户调用相同的任务)并跟踪任务中10个用户记录的集合,当然我计划有几个这样的任务,每个任务处理一部分用户.
还有其他组件可以处理单个事务,对于它们,我计划创建其他任务,在解析每个事务时(与其他任务并行).
我需要你的帮助#3.
设计这样一个组件的最佳实践是什么?很明显,它需要为每个用户维护10条记录的数据.键值映射可能会有所帮助,是否可以在任务本身或使用分布式缓存中管理映射?例如Redis是一个键值存储(之前从未使用过它).
谢谢你的帮助
distributed-computing distributed-caching batch-processing redis apache-storm
我遇到了需要在laravel 4中使用相关对象批量保存对象的情况.基本上我正在做的是对象的批量插入,其中每个对象可以有许多标记(多对多关系).
以下是一些示例代码,请注意TODO的注释:
[...]
$batchData = array();
$rowCount = 0;
foreach ($dataArray as $key => $row) {
[...]
// parsing row from CSV
$obj = array();
foreach ($row as $attribute => $value) {
$obj['template_id'] = $templateId;
$obj['batch_id'] = $batchId;
$obj['user_id'] = $confideUserId;
$obj['created_at'] = new \DateTime;
$obj['updated_at'] = new \DateTime;
// Attach Tags if any exist
if ($attribute === 'tags') {
if (!is_null($value) || !is_empty($value)) {
$tags = explode(":", $value);
// TODO: Get tag ID for each tag and add …Run Code Online (Sandbox Code Playgroud) 我需要在我的bat文件中运行的"Las2xyz"进程的进程ID.
我怎样才能实现这一目标?我不能使用最后一个RUN ID或第一个ID,我需要实际的进程ID,因为在任何给定时间有多个这些运行并且在任何给定时间结束我无法猜测它.
这是我的批次:
@echo off
@echo off
set PATH=C:\Windows\system32;C:\atlass\las2xyz;C:\atlass\las2xyz\bin;C:\atlass\las2xyz\lib
set TOP_HOME=%C:\atlass\las2xyz%
del dat*.xyz dat*.seg dat*.pat dat*.tmp dat*.txt test.nam
las2xyz.exe "[ flightpath 2 out 5 lasformat 1 target 0 FIXCLASS 1 step 20 unit *METRIC* fov 20.0 rollfix 1 sn_number *H68_038-003* lsystem *LIDAR_1* DESTSYS 144 minele -100.00 maxele 6000.00 hoff 0.00 eoff 0.00 noff 0.00 bootnr 13110201 leg 1]" "C:\Users\Developer-One\Desktop\las2xyz_Data\131102_003243_GPE.sdc" , "\\192.168.0.102\agis\Macquarie_Barwon_1310\Area_01\sbet_038_13110201.out" - "131102_003243_cov"
Run Code Online (Sandbox Code Playgroud)
有人告诉我该怎么做!谢谢
我正在尝试在批处理之间传递一个对象,但是在尝试从分区步骤(batchlet)访问jobContext时遇到了问题.
根据JSR 352规范
9.4.1.1批处理上下文生命周期和范围:批处理上下文具有线程关联,并且仅对在该特定线程上执行的批处理工件可见.超出范围时,批处理上下文注入字段可能为空.每种上下文类型都有一个不同的范围和生命周期,如下所示:1.JobContext每个作业执行一个JobContext.它存在于工作的生命中.并行执行的每个子线程都有一个独特的JobContext(例如,分区步骤). 2. StepContext每步执行一个StepContext.它存在于步骤的生命中.对于分区步骤,父步骤/线程有一个StepContext; 每个子线程都有一个独特的StepContext.
我的(失败)解决方案是使用JobContext.setTransientUserData,但由于分区步骤使用了不同的JobContext,因此无法获取TransientUserData.
有没有替代我正在尝试做的事情?使用PartitionMapper属性是不可能的,因为我需要将一个对象而不是一个字符串传递给每个分区.
要清楚,我需要这样做:
UPDATE
我现在使用带有HashMap的简单Singleton EJB在步骤之间存储对象,当作业完成时,我清除此映射以避免资源泄漏.
这是一种解决方法,因为我真的只想使用javax.batch包而不依赖于EJB,所以我不是把它作为答案.
我正在使用Gmail API进行WEB HTTP调用。有没有一种方法可以批量获取消息内容?
看来messages.list仅返回messageIds,而messages.get仅支持单个消息查询。
列表API:https://www.googleapis.com/gmail/v1/users/userId/messages GET API:https://www.googleapis.com/gmail/v1/users/userId/messages/id
帮帮我〜谢谢!
我想让批处理文件等待0.5或0.25秒.
我已经尝试timeout /t 0.5但是它没有用.
它是这样的:
@echo off
color a
cls
:top
echo %random%
timeout /t 0.5
echo %random%
goto top
我目前的情况:
我有10000条记录作为批量输入.根据我的理解,批处理仅用于逐个记录处理.因此,我在批处理步骤中使用dataweave组件转换每个记录(注意:我没有使用任何批处理提交)并将每个记录写入文件.进行逐条记录处理的原因在于,在任何特定记录中都存在无效数据,只有该特定记录失败,其余部分将被正确处理.
但在我看到的许多博客中,他们使用带有dataweave组件的batchcommit(带流).因此,根据我的理解,所有记录将一次性提供给数据编织,如果一条记录包含无效数据,则所有10000条记录都将失败(在数据编织时).然后,逐个记录处理的点丢失.以上假设是正确的还是我想错了?
这就是我不使用批量提交的原因.
现在,正如我所说,我将每条记录发送到一个文件.实际上,我确实需要将每条记录发送到5个不同的CSV文件.所以,目前我在BatchStep中使用Scatter-Gather组件将它发送到五个不同的路由.
因为,你可以看到图像.输入阶段提供10000条记录的集合.每条记录将使用Scatter-Gather发送到5条路线.
是,我使用的方法是好的,或任何更好的设计可以遵循?
此外,我已经创建了第二个批处理步骤,仅捕获FAILEDRECORDS.但是,使用当前的设计,我无法捕获失败的记录.
如何使用axios进行批处理请求:
我有以下批量请求
POST /batch HTTP/1.1
Content-Type: multipart/mixed; boundary=====1340674896===
--====1340674896===
GET /contacts/479038 HTTP/1.1
Content-Type: application/json
--====1340674896===
GET /contacts/299430 HTTP/1.1
Content-Type: application/json
--====1340674896===--
Run Code Online (Sandbox Code Playgroud)
如何使用axios获得响应:我正在尝试以下
const config = {
headers: {
'content-type': 'multipart/mixed; boundary=====1340674896==='
}
}
axios.post('/batch',data,config)
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
Run Code Online (Sandbox Code Playgroud)
如何传递数据
--====1340674896===
GET /contacts/479038 HTTP/1.1
Content-Type: application/json
--====1340674896===
GET /contacts/299430 HTTP/1.1
Content-Type: application/json
--====1340674896===--
Run Code Online (Sandbox Code Playgroud) batch-processing ×10
batch-file ×3
java ×2
orm ×2
apache-storm ×1
axios ×1
cmd ×1
dataweave ×1
eloquent ×1
glassfish-4 ×1
gmail ×1
gmail-api ×1
google-api ×1
hibernate ×1
javascript ×1
laravel-4 ×1
mule ×1
php ×1
redis ×1
rest ×1
windows ×1