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 ...
Search
Kamil Samigullin
May 03, 2016
Education
1
38
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
140
OctoLab Cookbook: how to use composer.yml and stop creating issues about
kamilsk
1
57
Enter Cookbook: refactoring under a microscope
kamilsk
1
55
Other Decks in Education
See All in Education
Ch1_-_Partie_1.pdf
bernhardsvt
0
210
20250830_MIEE祭_会社員視点での学びのヒント
ponponmikankan
1
150
Open Source Summit Japan 2025のボランティアをしませんか
kujiraitakahiro
0
830
DIP_1_Introduction
hachama
0
120
Padlet opetuksessa
matleenalaakso
4
14k
Human-AI Interaction - Lecture 11 - Next Generation User Interfaces (4018166FNR)
signer
PRO
0
520
高校におけるプログラミング教育を考える
naokikato
PRO
0
160
『会社を知ってもらう』から『安心して活躍してもらう』までの プロセスとフロー
sasakendayo
0
260
社外コミュニティと「学び」を考える
alchemy1115
2
180
【品女100周年企画】Pitch Deck
shinagawajoshigakuin_100th
0
5.8k
教える側は、初学者に谷越えまで伴走すべき(ダニング・クルーガー効果からの考察)
hysmrk
3
130
技術勉強会 〜 OAuth & OIDC 入門編 / 20250528 OAuth and OIDC
oidfj
5
1.7k
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
96
6.2k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
810
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
The Art of Programming - Codeland 2020
erikaheidi
56
13k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
30
9.7k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
520
Git: the NoSQL Database
bkeepers
PRO
431
66k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Writing Fast Ruby
sferik
628
62k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Why Our Code Smells
bkeepers
PRO
339
57k
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