Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
OctoLab Cookbook: how to generate a unique key for a sequence
Search
Kamil Samigullin
May 03, 2016
Education
1
30
OctoLab Cookbook: how to generate a unique key for a sequence
PHP tips and tricks: work with IteratorAggregate, Generator, SplQueue and SplDoublyLinkedList.
Kamil Samigullin
May 03, 2016
Tweet
Share
More Decks by Kamil Samigullin
See All by Kamil Samigullin
OctoLab Cookbook: Go lang tips and tricks - protection of sensitive config data
kamilsk
1
130
OctoLab Cookbook: how to use composer.yml and stop creating issues about
kamilsk
1
53
Enter Cookbook: refactoring under a microscope
kamilsk
1
45
Other Decks in Education
See All in Education
Design Guidelines and Principles - Lecture 7 - Information Visualisation (4019538FNR)
signer
PRO
0
1.7k
Gesture-based Interaction - Lecture 8 - Next Generation User Interfaces (4018166FNR)
signer
PRO
0
1.2k
わたしのメタ学習 / My Own Meta Learning #shinjukurb
expajp
0
110
Copilotとして理解する生成AI利用の基本
gmoriki
0
130
Introduction - Lecture 1 - Information Visualisation (4019538FNR)
signer
PRO
0
3.5k
Data Representation - Lecture 3 - Information Visualisation (4019538FNR)
signer
PRO
1
1.7k
STEAM教育の枠組で行うプログラミング学習
asial_edu
0
200
Microsoft Office 365
matleenalaakso
0
1.5k
Interactive Tabletops and Surfaces - Lecture 7 - Next Generation User Interfaces (4018166FNR)
signer
PRO
1
1.2k
HyRead2324
cbtlibrary
0
120
HCL Notes 14.0 「スタイルの変更」で「3 設定の確認」を深掘り
harunakano
0
1.9k
week2@tcue2024
nonxxxizm
0
750
Featured
See All Featured
How GitHub (no longer) Works
holman
304
140k
Git: the NoSQL Database
bkeepers
PRO
422
63k
GitHub's CSS Performance
jonrohan
1023
450k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
6
990
Reflections from 52 weeks, 52 projects
jeffersonlam
344
19k
Infographics Made Easy
chrislema
237
18k
Design by the Numbers
sachag
274
18k
Bash Introduction
62gerente
604
210k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
658
120k
Art, The Web, and Tiny UX
lynnandtonic
288
19k
The World Runs on Bad Software
bkeepers
PRO
61
6.7k
Agile that works and the tools we love
rasmusluckow
324
20k
Transcript
Episode #1.0.2 (2016-05-22) Level: Intermediate OctoLab Cookbook How to generate
a unique key for a sequence
The context
timestamp payment currency 18.03.2016 09:22:23 100 USD 18.03.2016 09:21:02 50
EUR 18.03.2016 09:19:46 10 USD 08.03.2016 09:31:03 10 USD 07.03.2016 22:52:17 145 USD 18.02.2016 23:17:25 35 EUR Import CSV from tinkoff.ru to TCA application
The problem
Merging timestamp payment currency 18.03.2016 09:22:23 100 USD 18.03.2016 09:21:02
50 EUR 18.03.2016 09:19:46 10 USD timestamp payment currency 18.03.2016 09:19:46 10 USD 08.03.2016 09:31:03 10 USD 07.03.2016 22:52:17 145 USD 18.02.2016 23:17:25 35 EUR timestamp payment currency 18.02.2016 23:17:25 35 EUR 17.02.2016 19:49:59 11 USD 02.02.2016 17:58:36 9 USD a first imported CSV file a second imported CSV file a third imported CSV file
The solution
- first iteration: simple, unique key constraint $table->addUniqueIndex([‘timestamp’, ‘payment’, ‘currency’]);
timestamp payment currency 22.02.2016 20:36:33 15 USD 22.02.2016 19:25:14 25
USD 22.02.2016 00:00:00 0,1 USD 22.02.2016 00:00:00 0,1 USD 21.02.2016 21:19:38 10 USD 21.02.2016 17:04:00 10 USD valid internal operations look exactly the same
- second iteration: buffering and forward hashing $table->addColumn(‘f_hash’, ‘string’, …)
$table->addUniqueIndex([‘f_hash’]);
None
column forward hash row 1 08bb542ead91978a26317a4aa8caf1e5d355706e row 2 e993895c5fd4fcbb22f9af9c7d341c47db87a8a7 row
3 7bb25dfeeaec0235cc5cdc4643a09e753687bded row 4 NULL buffer size = 2 column forward hash row 1 bd74be8fda860811368dfc3dd170f34652c73dea row 2 eaf057a4aac69217b5cc2c996679e7d1e11f411d row 3 NULL row 4 NULL buffer size = 3
- third iteration: bidirectional hashing $table->addColumn(‘b_hash’, ‘string’, …) $table->addUniqueIndex([‘b_hash’]);
None
column forward hash backward hash row 1 … NULL row
2 … 0b48e15756c28dc8a00d54594a1c25cabe707973 row 3 … af8d00a06f6e58ec06a650433df597cf4140d78b row 4 NULL 219fe3369d071daadedf81fde031e0f1e74f571b buffer size = 2 not-nullable combination
Limitations • number of rows in a CSV file must
be greater than or equal to the buffer size Benefits • import CSV files in any order • natural flow of the code with minimal changes in the original iteration
• StringifierInterface and CsvRowStringifier • BufferInterface and HashedBuffer • BufferedIterator
• changes in the original iteration The real-world example
Thank you for your attention! Have questions? Kamil Samigullin a
some developer
[email protected]
@ikamilsk github.com/kamilsk linkedin.com/in/kamilsk