SlideShare une entreprise Scribd logo
1  sur  155
Télécharger pour lire hors ligne
JBatch
… или	не	очень	большие	данные
Дмитрий	Александров
• Ведущий	эксперт-программист в	T-Systems
• 10	лет	кодю на	энтерпрайз
• Bulgarian	JUG	co-lead
• Балуюсь	организацией	конференций
• Люблю	самолетики 2
Немного	о	сегодняшнем	докладе
• Чаще	живу	не	в	России,	могу	странно	произносить	слова
3
Немного	о	сегодняшнем	докладе
• Чаще	живу	не	в	России,	могу	странно	произносить	слова
• По	умолчанию	буду	рассуждать	в	рамках Java	EE
4
Немного	о	сегодняшнем	докладе
• Чаще	живу	не	в	России,	могу	странно	произносить	слова
• По	умолчанию	буду	рассуждать	в	рамках Java	EE
• Для	демо буду	использовать	Arquillian
5
6
а	вообще	зачем	нужны	
компьютеры?
Правильный	ответ:
Смотреть	котиков!
Image	credits:	Simon’s	 Cat
…	но	вообще-то	они	помогают	
в	автоматизации
обработки	данных
… а	вы	помните	свою	
первую	задачу	на	работе?
Я	более	чем	уверен:
1. Взять	CSV	файлик
2. Распарсить его
3. Сохранить	в	базе
14
Миром	энтерпрайза до	сих	
пор	правят	CSV/XML файлы!
Image	credits:	pixar
А	что	вообще	такое	Batch?
16
А	что	вообще	такое	Batch?
•Пакетная	обработка.
17
А	что	вообще	такое	Batch?
•Пакетная	обработка.
•(почти) не	участвует	оператор.
18
А	что	вообще	такое	Batch?
•Пакетная	обработка.
•(почти) не	участвует	оператор.
•(часто)	как	фоновый	процесс.
..наяндексил
19
Пакетная	обработка	в	жизни
• Общественный	транспорт
20
Пакетная	обработка	в	жизни
• Общественный	транспорт
• Оптовая	торговля
21
Пакетная	обработка	в	жизни
• Общественный	транспорт
• Оптовая	торговля
• Общепит	J
22
А	зачем	вообще в	программировании?
• Целый	подкласс	задач
23
А	зачем	вообще в	программировании?
• Целый	подкласс	задач
• Особенно	в	энтерпрайзе
24
А	зачем	вообще в	программировании?
• Целый	подкласс	задач
• Особенно	в	энтерпрайзе
• Исполняются	долго
25
А	зачем	вообще в	программировании?
• Целый	подкласс	задач
• Особенно	в	энтерпрайзе
• Исполняются	долго (… ~41	час)
26
А	зачем	вообще в	программировании?
• Целый	подкласс	задач
• Особенно	в	энтерпрайзе
• Исполняются	долго (… ~41	час)
• За	ними	можно	наблюдать	и	ими	управлять
27
Чем	полезна	пакетная	обработка
28
Чем	полезна	пакетная	обработка
• Эффективность
29
Чем	полезна	пакетная	обработка
• Эффективность
• Лучшая	утилизация	ресурсов
30
Чем	полезна	пакетная	обработка
• Эффективность
• Лучшая	утилизация	ресурсов
• Автоматизация
31
Чем	полезна	пакетная	обработка
• Эффективность
• Лучшая	утилизация	ресурсов
• Автоматизация
• Концентрация	внимания	на	одной	задаче
32
Что	может	прийти	в	голову	при	слове	“Батч” в	Java
33
Что	может	прийти	в	голову	при	слове	“Батч” в	Java
• Spring	batch
34
Что	может	прийти	в	голову	при	слове	“Батч” в	Java
• Spring	batch
• Hadoop?
35
Что	может	прийти	в	голову	при	слове	“Батч” в	Java
• Spring	batch
• Hadoop?
• Spark?	
36
Что	может	прийти	в	голову	при	слове	“Батч” в	Java
• Spring	batch
• Hadoop?
• Spark?
• Websphere datagrid?
37
Что	может	прийти	в	голову	при	слове	“Батч” в	Java
Ну	что-нибудь	свое:
там	пару	циклов,	прочитать	файлик	..	записать	в	базу	данных!
38
А	в	чем	собственно	проблема?
• Обычно	сводится к	циклу:
• Прочитать	из	одного	места
• Обработать
• Положить	в	другое	
место/записать	результат
39
А	в	чем	собственно	проблема?
• Обычно	сводится к	циклу:
• Прочитать	из	одного	места
• Обработать
• Положить	в	другое	
место/записать	результат
• Таких	циклов	может	быть	
несколько,	необходимо	
управлять
40
А	в	чем	собственно	проблема?
• Обычно	сводится к	циклу:
• Прочитать	из	одного	места
• Обработать
• Положить	в	другое	
место/записать	результат
• Таких	циклов	может	быть	
несколько,	необходимо	
управлять
• А	что	если	надо	выполнить	что-
то	параллельно?
41
А	в	чем	собственно	проблема?
• Обычно	сводится к	циклу:
• Прочитать	из	одного	места
• Обработать
• Положить	в	другое	
место/записать	результат
• Таких	циклов	может	быть	
несколько,	необходимо	
управлять
• А	что	если	надо	выполнить	что-
то	параллельно?
• А	вдруг	что-то	пойдет	не	так?
42
А	в	чем	собственно	проблема?
• Обычно	сводится к	циклу:
• Прочитать	из	одного	места
• Обработать
• Положить	в	другое	
место/записать	результат
• Таких	циклов	может	быть	
несколько,	необходимо	
управлять
• А	что	если	надо	выполнить	что-
то	параллельно?
• А	вдруг	что-то	пойдет	не	так?
• А	когда	и	с	какой	
периодичностью	запускать?
43
А	в	чем	собственно	проблема?
• Обычно	сводится к	циклу:
• Прочитать	из	одного	места
• Обработать
• Положить	в	другое	
место/записать	результат
• Таких	циклов	может	быть	
несколько,	необходимо	
управлять
• А	что	если	надо	выполнить	что-
то	параллельно?
• А	вдруг	что-то	пойдет	не	так?
• А	когда	и	с	какой	
периодичностью	запускать?
• А	может	нужна	статистика?
44
тут	в	голову	приходит	мысль	о	
«не	очень	больших	данных»
46
47
48
49
50
51
JSR-352
• Экспертная	группа	создана	в	2011
• IBM,	VMware,	RedHat,	Oracle,	CrediteSuise и	др.
52
53
JSR-352
• Экспертная	группа	создана	в	2011
• IBM,	VMware,	RedHat,	Oracle,	CrediteSuise и	др.
• Сделана	под	сильным	впечатлением	Spring	Batch
54
JSR-352
• Экспертная	группа	создана	в	2011
• IBM,	VMware,	RedHat,	Oracle,	CrediteSuise и	др.
• Сделана	под	сильным	впечатлением	Spring	Batch
• Релиз	спецификации	24.11.2013
55
JSR-352
• Экспертная	группа	создана	в	2011
• IBM,	VMware,	RedHat,	Oracle,	CrediteSuise и	др.
• Сделана	под	сильным	впечатлением	Spring	Batch
• Релиз	спецификации	24.11.2013
• Часть	Java	EE	7!
56
JSR-352
• Экспертная	группа	создана	в	2011
• IBM,	VMware,	RedHat,	Oracle,	CrediteSuise и	др.
• Сделана	под	сильным	впечатлением	Spring	Batch
• Релиз	спецификации	24.11.2013
• Часть	Java	EE	7!
• Но работает	и	на	Java	SE)
57
JSR-352	куул фичеры
• Обработка	данных	«Кусками»	
или	полностью
58
JSR-352	куул фичеры
• Обработка	данных	«Кусками»	
или	полностью
• Последовательная	или	
параллельная	обработка
59
JSR-352	куул фичеры
• Обработка	данных	«Кусками»	
или	полностью
• Последовательная	или	
параллельная	обработка
• Чекпоинты
60
JSR-352	куул фичеры
• Обработка	данных	«Кусками»	
или	полностью
• Последовательная	или	
параллельная	обработка
• Чекпоинты
• Управление	потоком	работы
61
JSR-352	куул фичеры
• Обработка	данных	«Кусками»	
или	полностью
• Последовательная	или	
параллельная	обработка
• Чекпоинты
• Управление	потоком	работы
• Остановка/восстановление
62
JSR-352	куул фичеры
• Обработка	данных	«Кусками»	
или	полностью
• Последовательная	или	
параллельная	обработка
• Чекпоинты
• Управление	потоком	работы
• Остановка/восстановление
• Управление	исключениями
63
JSR-352	куул фичеры
• Обработка	данных	«Кусками»	
или	полностью
• Последовательная	или	
параллельная	обработка
• Чекпоинты
• Управление	потоком	работы
• Остановка/восстановление
• Управление	исключениями
• Транзакционность
64
JSR-352	куул фичеры
• Обработка	данных	«Кусками»	
или	полностью
• Последовательная	или	
параллельная	обработка
• Чекпоинты
• Управление	потоком	работы
• Остановка/восстановление
• Управление	исключениями
• Транзакционность
• Mетрики
65
Вместо	тысячи	слов
66
А	пока	я	тут	говорю..
Код	можете	взять	тут:
https://github.com/dalexandrov/jbatch-demo
67
Ничего	не	напоминает?
68
Концепции
Job	
Operator
Job Step
JobRepository
ItemReader
ItemProcessor
ItemWriter
1 *
1
1
1 1
1
1
Batchlet
Chunk
Contexts Partitioning
Listeners
69
Имплементация
Оркестрация
Исполнение
Работа	штука	сложная
Job
JobInstance
JobExecution
*
*
The	Midnight Job
The	Midnight Job
21.10.2016
The	Midnight Job
21.10.2016
Attempt	One
70
Chunk	vs.	batchlet
• Chunk
• ETL	Pattern
• Содержит	по	одному	Reader,	
Processor,	Writer
• Reader/Processor	вызываются	пока	
обрабатывается	«кусок»
• Далее	записывается	весь	«кусок»
• Batchlet
• Вызывается,	исполняется,	
возвращает	return	code	на	выходе
ItemReader
ItemProcessor
ItemWriter
1
1
1 1
1
1
Batchlet
Chunk
Contexts Partitioning
Listeners
71
Внутри	Step - chunk
ItemReaderStep ItemProcessor ItemWriter
read()
ReturnStatus
execute()
T	item
process(T	item)
P processedItem
write(List<P>	processedItems)
72
Определение	Step
<step	id="jokerStep">
<chunk	checkpoint-policy="item"	item-count="3">	
<reader	ref="myItemReader"/>	
<processor	ref="myItemProcessor"/>	
<writer	ref="myItemWriter"/>	
</chunk>	
</step>	
Оркестрация
73
ItemReader
@Named
public	class	MyItemReader extends	AbstractItemReader {	
@Override
public	Object	readItem()	throws	Exception	{...}	
}	
Имплементация
74
ItemProcessor
@Named
public	class	MyItemProcessor implements	ItemProcessor {	
@Override
public	Object	processItem(Object	item)	throws	Exception	{...}	
}	
Имплементация
75
ItemWriter
@Named
public	class	MyItemWriter extends	AbstractItemWriter {	
@Override
public	void	writeItems(List<Object>	items)	throws	Exception	{...}	
}	
Имплементация
76
… а	если	не	все	
вписывается	в	ETL	pattern?
А	batchlet вообще	норм
BatchletStep
process()
ReturnStatus
execute()
ReturnStatus
78
Примерно	так
@Named
public	class	MyBatchlet extends	AbstractBatchlet {	
@Override
public	String	process()	{	
System.out.println("Joker");	
return	BatchStatus.COMPLETED.toString();	
}	
}	
Имплементация
79
Теперь	попытаемся	со	всем	этим	взлететь
JobOperator jobOperator =	
BatchRuntime.getJobOperator();
Long	executionId =	jobOperator.start("jokerJob",	new	Properties());	
JobExecution jobExecution =	jobOperator.getJobExecution(executionId);	
Исполнение
80
Batch	Exit	Status	
• Job	и	Step	имеют	exit	status
• Для	управления	workflow
• STARTING,	STARTED,	STOPPING,	STOPPED,	FAILED,	COMPLETED,	
ABANDONED	
81
На	этом	все!
Можно	на	обед!
И	мы	собирались	только	
ради	этого?
Усложним!
Listeners
…
<listeners>
<listener	ref="myJobListener"/>
</listeners>
…
Оркестрация
85
Опаньки…
Exception	хэндлинг
<chunk	checkpoint-policy="item"	item-count="3"	
skip-limit="3"	retry-limit="3">	
…
<skippable-exception-classes>	
<include	class="java.lang.RuntimeException"/>	
<exclude	class="java.lang.IllegalArgumentException"/>	
</skippable-exception-classes>	
<retryable-exception-classes>	
<exclude	class="java.lang.IllegalArgumentException"/>	
</retryable-exception-classes>	
</chunk>	
Оркестрация
88
Exception	хэндлинг
<chunk	checkpoint-policy="item"	item-count="3"	
skip-limit="3"	retry-limit="3">	
…
<skippable-exception-classes>	
<include	class="java.lang.RuntimeException"/>	
<exclude	class="java.lang.IllegalArgumentException"/>	
</skippable-exception-classes>	
<retryable-exception-classes>	
<exclude	class="java.lang.IllegalArgumentException"/>	
</retryable-exception-classes>	
</chunk>	
Оркестрация
89
Exception	хэндлинг
<chunk	checkpoint-policy="item”	item-count="3"	
skip-limit="3"	retry-limit="3">	
…
<skippable-exception-classes>	
<include	class="java.lang.RuntimeException"/>	
<exclude	class="java.lang.IllegalArgumentException"/>	
</skippable-exception-classes>	
<retryable-exception-classes>	
<exclude	class="java.lang.IllegalArgumentException"/>	
</retryable-exception-classes>	
</chunk>	
Оркестрация
90
Checkpoint
91
Checkpoint
•Бывает	2х	типов:
• Item
• Custom
92
Checkpoint
<step	id="jokerStep">
<chunk	checkpoint-policy="custom">	
<reader	ref="myItemReader"/>	
<processor	ref="myItemProcessor"/>	
<checkpoint-algorithm	ref="MyCheckpointAlgorithm"/>	
</chunk>	
</step>	
Оркестрация
93
Алгоритм!
@Named
public class MyCheckpointAlgorithmextends AbstractCheckpointAlgorithm{
….
@Override
public boolean isReadyToCheckpoint()	throws Exception	{
return count	%	5	==	0;
}
}
Имплементация
94
Partition
© Symantec
95
Partition
96
Database
Thread	1
Process	CSV:
1.	….
…..
1000.	....
Partition
• Что-то	типа	«шардинга»	
• Легко	оркестрируется
• Легко	можно	написать	свой	алгоритм	распараллеливания	
97
Partition
98
Database
Thread	1
Process	CSV:
1.	….
…..
500.	....
Thread	2
Process	CSV:
501.	….
…..
1000.	....
Partition
<partition>
<plan	partitions="2">
<properties	partition="0">
<property	name="start"	value="0"/>
<property	name="end"	value="500"/>
</properties>
<properties	partition="1">
<property	name="start"	value="501"/>
<property	name="end"	value="1000"/>
</properties>
</plan>
</partition>
Оркестрация
99
Partition
<chunk	item-count="3">
<reader	ref="myItemReader">
<properties>
<property	name="start"	value="#{partitionPlan['start']}"		/>
<property	name="end"	value="#{partitionPlan['end']}"		/>
</properties>																
</reader>	
<processor	ref="myItemProcessor"/>
<writer	ref="myItemWriter"/>
</chunk>
Оркестрация
100
Partition
Реально	можно	ускориться!
101
Flow/Split
Flow/Split
Постановка	задачи
104
Прочитать	файл Записать	в	базу
Постановка	задачи
105
Прочитать	файл Записать	в	базу
Сгенерировать	
инвойсы
Отправить	email
Собрать	
статистику
Постановка	задачи
106
Прочитать	файл Записать	в	базу
Сгенерировать	
инвойсы
Отправить	email
Собрать	
статистику
Flow
• Это	касается	бизнес	процессов
107
Flow
• Это	касается	бизнес	процессов
• Логическое	разделение	процессов
108
Flow
• Это	касается	бизнес	процессов
• Логическое	разделение	процессов
• Атомарная	последовательность	шагов
109
110
Постановка	задачи
111
Прочитать	файл Записать	в	базу
Сгенерировать	
инвойсы
Отправить	email
Собрать	
статистику
Split
• Параллельное	исполнение	нескольких	Flow
112
Split
• Параллельное	исполнение	нескольких	Flow
• Не	путать	с	Partition
113
Split
• Параллельное	исполнение	нескольких	Flow
• Не	путать	с	Partition
• Внутри	могут	быть	только	Flow
114
Split
<split	id="mySplit">	
<flow	id="flow1">	
<step	id="myChunk"	next="myBatchlet”>...</step>	
<step	id="myBatchlet">...</step>	
</flow>	
<flow	id="flow2">
<step	id="otherChunk"	next= "otherBatchlet">...</step>	
<step	id="otherBatchlet">...</step>	
</flow>	
</split>	
Оркестрация
115
А	в	чем	собственно	разница?
• Partition	это	про	данные
• Flow/Split	это	про	бизнес	процессы
116
Decision
117
Decision
• Решать	что	делать	дальше
• Применяется	для	Step,	Flow	и	Split
• По	сути	это	if/else
• Необходимо	имплементировать
118
Decision
<step	id="myStep"	next="myDecider">	
<batchlet ref="myBatchlet”/>	
</step>
<decision	id="myDecider"	ref="MyDecider">	
<next	on="foo"	to="myFooStep"/>	
<next	on="bar"	to="myBarStep"/>	
</decision>	
Оркестрация
119
Decision
public	class	MyDecider implements	Decider	{	
public	String	decide(StepExecution[]	executions)	
throws	Exception	{
return	"decision";
}	
}	
Имплементация
120
121
Метрики
• readCount – сколько	успешно	прочитали.	
• writeCount – сколько	успешно	записали.	
• filterCount – сколько	отфильтровано	ItemProcessor.	
• commitCount – сколько	транзакций	закомичено.	
• rollbackCount – сколько	транзакций	заролбечино.	
• readSkipCount – сколько	«skippable» исключений	кинуто	ItemReader.	
• processSkipCount – сколько	«skippable» исключений	кинуто	
ItemProcessor.	
• writeSkipCount – сколько «skippable» исключений	кинуто	ItemWriter.	
122
Транзакционность
• JBatch должен	работать	как	в	SE	так	и	в	EE
• Глобальный	режим	транзакций	в	режиме	ЕЕ
• Коммит происходит	при	записи	чанка
• Локальный	режим	транзакций	в	режиме	SE
• По	таймауту
123
А	там	что-то	про	шедюлер?	
Или	скеджулер?
Ну	так	вот..
его	нет.
Но	не	надо	огорчаться
• Это	просто	не	в	компетенции	JSR-352
128
Но	не	надо	огорчаться
• Это	просто	не	в	компетенции	JSR-352
• В	среде	EE	решается	обыкновенным	@Scheduler
129
Но	не	надо	огорчаться
@Singleton	
public	class	BatchJobRunner {	
@Schedule(dayOfWeek =	"Sun")	
public	void	scheduleJob()	{	
JobOperator jobOperator =	
BatchRuntyme.getJobOperator();	
jobOperator.start("myJob",	new	Properties());	
}	
}	
130
Но	не	надо	огорчаться
• Это	просто	не	в	компетенции	JSR-352
• В	среде	EE	решается	обыкновенным	@Scheduler
• В	среде	SE	можно	прикрутить	например	Quartz*
*http://www.quartz-scheduler.org/
131
И	еще	ложки	дегтя
• Все	еще	мало	стандартных	Readers/Writers
132
И	еще	ложки	дегтя
• Все	еще	мало	стандартных	Readers/Writers
• Без	Generics
133
И	еще	ложки	дегтя
• Все	еще	мало	стандартных	Readers/Writers
• Без	Generics
• Только	xml	конфигурация
134
И	еще	ложки	дегтя
• Все	еще	мало	стандартных	Readers/Writers
• Без	Generics
• Только	xml	оркестрация
135
Но	ведь	есть	другие	батч
движки?
Известные	имплементации JSR-352
• JBatch IBM	(Glassfish,	JEUS)	
• JBeret (Wildfly)
• BatchEE
• ну	и	конечно	же	Spring	Batch*
*(не	совсем)	
137
Spring	Batch
• Первый	стабильный	релиз 2009
• Послужило	прототипомдля	JSR-352
• Сильная	интеграция	в	мире	Spring
138
Spring	Batch
Spring	Batch JSR-352
Job Job
Step Step
Chunk Chunk
Item Item
ItemReader/ItemStream ItemReader
ItemProcessor ItemProcessor
ItemWriter/ItemStream ItemWriter
JobInstance JobInstance
JobExecution JobExecution
StepExecution StepExecution
JobExecutionListener JobListener
StepExecutionListener StepListener
Listeners Listeners 139
Spring	Batch
140
Spring	Batch
Spring	Batch:
<job id="myJob">
<step id="myStep">
<tasklet>
<chunk
reader="reader"
writer="writer"
processor="processor"
commit-interval="10"/>
</tasklet>
</step>
</job>
JSR-352:
<job id="myJob">
<step id="myStep"	>
<chunk item-count="2">
<reader	ref="reader"/>
<processor	ref="processor"/>
<writer	ref="writer"/>
</chunk>
</step>
</job>
141
Spring	Batch
С	версии	3.0	оркестрацию можно	вести	в	формате	JSR-352	
J
142
EasyBatch
• Относительно	молодой	проект
• Не	стандартизованный
• Позиционируется	как	очень	простая	и	легко	воспринимаемая	
альтернатива
• Чем-то	напоминает	стримы
• https://github.com/EasyBatch/easybatch-framework
143
EasyBatch
public	class	EasyBatchHelloWorldLauncher {
public	static	void	main(String[]	args)	throws	Exception	{
JobBuilder.aNewJob()
.reader(new	FlatFileRecordReader(new	File("tweets.csv")))
.filter(new	HeaderRecordFilter())
.mapper(new	DelimitedRecordMapper(Tweet.class,	 "id",	"user",	"message"))
.processor(new	TweetProcessor())
.call();
}
}
public	class	TweetProcessor implements	RecordProcessor<Record<Tweet>,	Record<Tweet>>	{
@Override
public	Record<Tweet>	processRecord(Record<Tweet>	record)	{
System.out.println(record.getPayload());
return	record;
}
}
144
в	помощь
JBatch suite
145
в	помощь
JBoss tools
146
Выводы
147
Выводы
• Не	стоит	недооценивать	данный	класс	задач
148
Выводы
• Не	стоит	недооценивать	данный	класс	задач
• Особенно	в	энтерпрайзе
149
Выводы
• Не	стоит	недооценивать	данный	класс	задач
• Особенно	в	энтерпрайзе
• Почти	всегда	требования	будут	усложняться
150
Выводы
• Не	стоит	недооценивать	данный	класс	задач
• Особенно	в	энтерпрайзе
• Почти	всегда	требования	будут	усложняться
• Уже	почти	все	придумано!	Бери	и	пользуйся!
151
152
Можно	уже	не (так	сильно)	велосипедить!
Вопросы	есть?
153
154
Чтиво	для	досуга
• https://jcp.org/en/jsr/detail?id=352
• http://projects.spring.io/spring-batch/
• http://www.easybatch.org/
155

Contenu connexe

En vedette (9)

Blockposter 045752
Blockposter 045752Blockposter 045752
Blockposter 045752
 
Prezi
PreziPrezi
Prezi
 
Profiling in Python
Profiling in PythonProfiling in Python
Profiling in Python
 
Remotee
RemoteeRemotee
Remotee
 
Testing the Java EE
Testing the Java EETesting the Java EE
Testing the Java EE
 
Think Async in Java 8
Think Async in Java 8Think Async in Java 8
Think Async in Java 8
 
WWARS
WWARSWWARS
WWARS
 
Mysore university question bank OB
Mysore university question bank OBMysore university question bank OB
Mysore university question bank OB
 
Business environment
Business environmentBusiness environment
Business environment
 

Similaire à JBatch

Демонизированный PHP - before it was cool
Демонизированный PHP - before it was coolДемонизированный PHP - before it was cool
Демонизированный PHP - before it was coolAndrey Tokarchuk
 
Почему оно не находится! / Андрей Аксенов (Sphinx)
Почему оно не находится! / Андрей Аксенов (Sphinx)Почему оно не находится! / Андрей Аксенов (Sphinx)
Почему оно не находится! / Андрей Аксенов (Sphinx)Ontico
 
Как мы админа увольняли, или тонкости организации корпоративной безопасности ...
Как мы админа увольняли, или тонкости организации корпоративной безопасности ...Как мы админа увольняли, или тонкости организации корпоративной безопасности ...
Как мы админа увольняли, или тонкости организации корпоративной безопасности ...Ontico
 
Учебный план для highload гуру / Андрей Аксёнов (Sphinx Technologies Inc.)
Учебный план для highload гуру / Андрей Аксёнов (Sphinx Technologies Inc.)Учебный план для highload гуру / Андрей Аксёнов (Sphinx Technologies Inc.)
Учебный план для highload гуру / Андрей Аксёнов (Sphinx Technologies Inc.)Ontico
 
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)Ontico
 
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем SphinxCodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем SphinxCodeFest
 
Валерий Петров «Модель памяти .NET»
Валерий Петров «Модель памяти .NET»Валерий Петров «Модель памяти .NET»
Валерий Петров «Модель памяти .NET»SpbDotNet Community
 
Илья Климов "О драконах ни слова"
Илья Климов "О драконах ни слова"Илья Климов "О драконах ни слова"
Илья Климов "О драконах ни слова"Fwdays
 
А какой у вас Agile: свежевыжатый или порошковый?
А какой у вас Agile: свежевыжатый или порошковый?А какой у вас Agile: свежевыжатый или порошковый?
А какой у вас Agile: свежевыжатый или порошковый?Andrey Bibichev
 
Проходим тест Джоэла
Проходим тест ДжоэлаПроходим тест Джоэла
Проходим тест Джоэла0leGG
 
Tech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU
 
Surviving as a Professional Software Developer
Surviving as a Professional Software DeveloperSurviving as a Professional Software Developer
Surviving as a Professional Software DeveloperYakov Fain
 
Javaone 2013 moscow gradle
Javaone 2013 moscow gradleJavaone 2013 moscow gradle
Javaone 2013 moscow gradleEvgeny Borisov
 
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)Ontico
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныRoman Dvornov
 
"Хотели как лучше, а не получилось" Бандура Анна, Рощупкин Виталий, Рычков Ан...
"Хотели как лучше, а не получилось" Бандура Анна, Рощупкин Виталий, Рычков Ан..."Хотели как лучше, а не получилось" Бандура Анна, Рощупкин Виталий, Рычков Ан...
"Хотели как лучше, а не получилось" Бандура Анна, Рощупкин Виталий, Рычков Ан...it-people
 
Максим Лапшин. Erlang production
Максим Лапшин. Erlang productionМаксим Лапшин. Erlang production
Максим Лапшин. Erlang productionAlina Dolgikh
 
MagicPlot @ UXSPb @ IT Global Meetup #7
MagicPlot @ UXSPb @ IT Global Meetup #7MagicPlot @ UXSPb @ IT Global Meetup #7
MagicPlot @ UXSPb @ IT Global Meetup #7Alexander Levantovsky
 
Опыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игрыОпыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игрыYuri Zhloba
 

Similaire à JBatch (20)

Демонизированный PHP - before it was cool
Демонизированный PHP - before it was coolДемонизированный PHP - before it was cool
Демонизированный PHP - before it was cool
 
WepPerfomance,
WepPerfomance, WepPerfomance,
WepPerfomance,
 
Почему оно не находится! / Андрей Аксенов (Sphinx)
Почему оно не находится! / Андрей Аксенов (Sphinx)Почему оно не находится! / Андрей Аксенов (Sphinx)
Почему оно не находится! / Андрей Аксенов (Sphinx)
 
Как мы админа увольняли, или тонкости организации корпоративной безопасности ...
Как мы админа увольняли, или тонкости организации корпоративной безопасности ...Как мы админа увольняли, или тонкости организации корпоративной безопасности ...
Как мы админа увольняли, или тонкости организации корпоративной безопасности ...
 
Учебный план для highload гуру / Андрей Аксёнов (Sphinx Technologies Inc.)
Учебный план для highload гуру / Андрей Аксёнов (Sphinx Technologies Inc.)Учебный план для highload гуру / Андрей Аксёнов (Sphinx Technologies Inc.)
Учебный план для highload гуру / Андрей Аксёнов (Sphinx Technologies Inc.)
 
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
 
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем SphinxCodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
 
Валерий Петров «Модель памяти .NET»
Валерий Петров «Модель памяти .NET»Валерий Петров «Модель памяти .NET»
Валерий Петров «Модель памяти .NET»
 
Илья Климов "О драконах ни слова"
Илья Климов "О драконах ни слова"Илья Климов "О драконах ни слова"
Илья Климов "О драконах ни слова"
 
А какой у вас Agile: свежевыжатый или порошковый?
А какой у вас Agile: свежевыжатый или порошковый?А какой у вас Agile: свежевыжатый или порошковый?
А какой у вас Agile: свежевыжатый или порошковый?
 
Проходим тест Джоэла
Проходим тест ДжоэлаПроходим тест Джоэла
Проходим тест Джоэла
 
Tech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест Джоэла
 
Surviving as a Professional Software Developer
Surviving as a Professional Software DeveloperSurviving as a Professional Software Developer
Surviving as a Professional Software Developer
 
Javaone 2013 moscow gradle
Javaone 2013 moscow gradleJavaone 2013 moscow gradle
Javaone 2013 moscow gradle
 
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
 
"Хотели как лучше, а не получилось" Бандура Анна, Рощупкин Виталий, Рычков Ан...
"Хотели как лучше, а не получилось" Бандура Анна, Рощупкин Виталий, Рычков Ан..."Хотели как лучше, а не получилось" Бандура Анна, Рощупкин Виталий, Рычков Ан...
"Хотели как лучше, а не получилось" Бандура Анна, Рощупкин Виталий, Рычков Ан...
 
Максим Лапшин. Erlang production
Максим Лапшин. Erlang productionМаксим Лапшин. Erlang production
Максим Лапшин. Erlang production
 
MagicPlot @ UXSPb @ IT Global Meetup #7
MagicPlot @ UXSPb @ IT Global Meetup #7MagicPlot @ UXSPb @ IT Global Meetup #7
MagicPlot @ UXSPb @ IT Global Meetup #7
 
Опыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игрыОпыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игры
 

JBatch