Тёмный
TigerBeetle
TigerBeetle
TigerBeetle
Подписаться
The financial transactions database designed for mission critical safety and performance.

Watch us build TigerBeetle... in a world first for the genre of Distributed Database Television!

Subscribe at www.twitch.tv/tigerbeetle/ to join us live.
Episode 034: Prefetching From Disk
1:05:38
День назад
Episode 33: Prefetching From Memory
1:09:05
14 дней назад
Episode 031 1/2: Journal vs. Checkpoint
1:01:08
28 дней назад
Episode 031: The Forest and the Groove
1:04:06
Месяц назад
Episode 030: ManifestLog Compaction
1:05:38
Месяц назад
Episode 028: The FreeSet, Part I
1:13:23
Месяц назад
Episode 3³: Storage BIG Picture
1:17:04
2 месяца назад
Episode 26: SUPER DUPER BLOCK
1:12:29
2 месяца назад
Episode 023: To fsync or not to fsync?
1:07:39
3 месяца назад
Episode 21: Grid.Write
1:03:08
3 месяца назад
Episode 020: Log-Structured Merge Tree
1:05:44
3 месяца назад
Episode 019: A Sorted Array on Disk
1:10:09
4 месяца назад
Episode 018: Simulation Failure
55:11
4 месяца назад
Episode 017: Consensus Wrap Up
50:50
4 месяца назад
Episode 015: View Change
59:57
5 месяцев назад
Episode 014: Repairing Headers
1:02:38
5 месяцев назад
Episode 013: Prepare Repair
1:03:11
5 месяцев назад
Episode 012: Run to the IO_urings!
1:23:08
6 месяцев назад
Episode 011: Let's Go to the Disk!
1:22:40
6 месяцев назад
Episode 009: Pragmatics of Consensus, Part 1
1:11:38
6 месяцев назад
Комментарии
@dwylhq874
@dwylhq874 15 дней назад
00:14 TigerBeetle an elaborate way to get cash from FinTech to buy kitesurfing gear. 😜 Joking aside. Great presentation! ❤
@haathimmunas1563
@haathimmunas1563 17 дней назад
bro whats the desktop env you use?
@matheusalcantara2619
@matheusalcantara2619 15 дней назад
seems kde
@daxramdac7194
@daxramdac7194 18 дней назад
The King himself, love this guys energy, and he's very knowledgable
@andelsonnicolaslopezysabel2501
@andelsonnicolaslopezysabel2501 24 дня назад
Great video and explanation, can you please tell me what distro are you using?
@timibolu
@timibolu 27 дней назад
I really enjoyed this episode
@unnaturaltm
@unnaturaltm 27 дней назад
is there an openAPI kinda way to have system design documented automatically from code? (C4 diagrams or something, instead of API docs)
@elixirfun
@elixirfun 27 дней назад
Elixir's pattern matching and guards are a perfect example of such assertions built into the language philosophy. And it doesn't have that problem of Go with assertion because servers don't crash at an exception, only single, isolated processes do.
@CitizensCommunity
@CitizensCommunity 27 дней назад
If there is a limit to the loop then that will fix some issues and open a new path that must also be thought of. Its a good and interesting idea, but its also not without its new potential for issues.
@anj000
@anj000 28 дней назад
This game at the end went over my head, not gona lie. I'm not sure what am I seeing there.
@pollathajeeva23
@pollathajeeva23 29 дней назад
Hey team, the audio quality is very poor and hard to listen too😒
@tigerbeetledb
@tigerbeetledb 27 дней назад
Yeah, sorry about that, that's the first time we tried to have two people on the stream at the same time, will try to do something about that. It took like 10 episodes to get _my_ audio in order :D
@mambotheaussie
@mambotheaussie Месяц назад
You might of said it in the video and I missed it, but are making the assumption that all devices will share the same endianness?
@tigerbeetledb
@tigerbeetledb Месяц назад
Yes, we do have a comptime-assertion about the endiannes. All TigerBeetle targets are little endian, and trying to build for big endian would fail with an explicit compile-time error
@krellin
@krellin Месяц назад
love the assertsions everywhere, dont see peopel do that often are those disabled in prod?
@tigerbeetledb
@tigerbeetledb Месяц назад
No, asserts stay on in production. We even have a comptime check that asserts don't get disabled
@krellin
@krellin Месяц назад
@@tigerbeetledb nice, i do the same in JVM though i retain an option to completely eliminate them at compile time but performance cost is so low and failing fast with better error messages is so nice that i leave them in too. This project makes me want to seriously dive into Zig.
@krellin
@krellin Месяц назад
@@tigerbeetledb i know that state machine of the db is designed to be very decoupled so one would in theory be able to reuse all the foundational things of this db to make something completely different (reuse high availability, zero serialization etc)... but realistically how easy it is to do something like that? Have you tried to make anything else by reusing the benefits of the modules surrounding the state machine?
@tigerbeetledb
@tigerbeetledb Месяц назад
@@krellin Pretty easy to do. We actually already have two different state machines implemented: the double-entry accounting, the real one, and the simpler "testing" machine geared at uncovering consensus bugs quickly: github.com/tigerbeetle/tigerbeetle/blob/main/src/testing/state_machine.zig. This is totally designed to be extensible, though we are not currently providing any kind of stability guarantees around the interface.
@krellin
@krellin Месяц назад
@@tigerbeetledb awesome, will definitely dive more into the code and experiment with it. Please keep the series going, its great.
@3DArea
@3DArea Месяц назад
This is really cool and the explanation is really appreciated. It's impressive how "easy" a compaction in an LSM-tree seems conceptually, but how many gotchas you can find when attempting to implement it
@tigerbeetledb
@tigerbeetledb Месяц назад
And it's only manifest log compaction, which is the easy case!
@hannahgrazzini
@hannahgrazzini Месяц назад
This is so good
@dwylhq874
@dwylhq874 Месяц назад
This one of the few channels I have *notifications on* for. 🔔 TigerBeetle is _sick_ !! Your whole team is _awesome_ !! 😍 So stoked to _finally_ be using this in a real project! 🎉 Keep up the great work. 🥷
@jorandirkgreef
@jorandirkgreef Месяц назад
Thank you so much! You're sicker still! :) And we're also so stoked to hear that!
@user-gi8oc4dr1c
@user-gi8oc4dr1c Месяц назад
Кайф! 😊
@CTILET
@CTILET Месяц назад
Ниче не понимаю но выглядит интересно
@anindhap
@anindhap Месяц назад
Great video! Thanks!
@anindhap
@anindhap Месяц назад
Why do you need a header checksum if you are only using TCP?
@tigerbeetledb
@tigerbeetledb Месяц назад
For two reasons: * TCP checksum is actually pretty weak, there's a non-negligible probability that some corruption slips in. Its not a cryphographically-strong checksum. Plus, there's also a probability of outright bugs in TCP implementations on any machine on the path between sender and receiver. * we don't want to be bound to TCP semantics specifically. The code uses a very weak networking model, where we don't really care _how_ we got the message. So, we'll be able to switch to UDP or any other protocol easily!
@salim444
@salim444 Месяц назад
37:51 Clojure has spec which is quite similar to asserts on input and output with fuzy testing and also a simple predicates on inputs and output
@tenthlegionstudios1343
@tenthlegionstudios1343 Месяц назад
Cant wait to watch these next few! I Did watch a few of the old streams/videos going over the LSM forest, but I am looking forward to getting this deep dive. I really appreciate all the work you have done on this. A guided code walkthrough TigerBeetles codebase is amazing.
@Peter-bg1ku
@Peter-bg1ku Месяц назад
King is the king of both the mic and the keyboard.
@Peter-bg1ku
@Peter-bg1ku Месяц назад
I never thought Redis AOF were this simple.
@stevesteve8098
@stevesteve8098 2 месяца назад
Yes.... i remember back in the 90's oracle tried this system of "direct IO", Blew lots of trumpets..... and announced it HAS to be better & faster Because ....'insert reasoning here" Well you know what..... it was complete bullshit, becasue they made lots of assumptions and very little real testing. Because even you THINK you are writing directly to the "disk" YOU ARE NOT.... you are Writing to a BLACK BOX., you have absolutely NO idea of HOW or WHAT is implemented in that Black box. There may be a thousand buffer levels in that box, with all sorts of swings and roundabouts. so... no.... you are NOT directly writing to disk, such a basic lack of insight and depth of thought is a worry with this sort of "data" Evangelicalism...
@jorandirkgreef
@jorandirkgreef Месяц назад
Thanks Steve, I think we're actually in agreement here. That's why TigerBeetle was designed with an explicit storage fault model, where we expect literally nothing of the "disk" (whether physical or virtualized). For example, we fully expect that I/O may be sent to the wrong sector or corrupted, and we test this to extreme lengths with the storage fault injection that we do. Again, we fully expect to be running in virtualized environments or across the network, or on firmware that doesn't fsync etc. and pretty much all of TigerBeetle was designed with this in mind. However, at the same time, to be clear, this talk is not so much about the "disk" as hardware-as about the kernel page cache as software, and what the kernel page cache does in response to I/O errors (whether from real disk or virtual disk). We're really trying to shine a spotlight on the terrific work coming out of UW-Madison in this regard: www.usenix.org/system/files/atc20-rebello.pdf To summarize their findings then, while Direct I/O is (completely) not sufficient, it is still necessary. It's just one of many little things you need to get right, if you have an explicit storage fault model, and if you want to preserve as much durability as you can. At least
@ForeverZer0
@ForeverZer0 2 месяца назад
Zig has been on my radar for about a year as one of those languages "I want to learn someday". About a month ago I finally devoted some time to it, and I regret not having done it sooner. I initially found the syntax off-putting, but within literally a few hours, I came to really appreciate it, realizing how smoothly it allowed you to do perform many tasks and work with the language idioms. The stdlib is a little sparse in the documentation department, but I can hardly hold that against a language that hasn't even hit v1.0 yet.
@solagratiasolafide
@solagratiasolafide 2 месяца назад
Jepsen mentioned
@Hector-bj3ls
@Hector-bj3ls 2 месяца назад
I wish there were some examples of what he was talking about. Sometimes it just sounds like vague advice. "Do software good like an artist does"... Okay, but like what? Like when talking about naming things he just said: "Use the right nouns and make the names good and clear". Yes, I agree, probably, but what are some examples? How do I know what you mean by "use the right noun"? I think I do that, but I have no idea what you think that is, nor what Tiger Style says on the subject.
@amoghyermalkar5502
@amoghyermalkar5502 2 месяца назад
I love the kind of content, but it would really help to stick till the end of the video if the audio quality wasn't this bad!
@ikolomiets
@ikolomiets 2 месяца назад
So far, this is the most mind-twisting episode of all the previous ones. I'm still struggling to build a mental model around the idea of each ballot is processed concurrently by the replicas, yet a replica can "assess" the result of casting for previous ballots. Are there popular media (articles, video) describing the very same fundamentals behind consensus?
@tigerbeetledb
@tigerbeetledb 2 месяца назад
These two lectures made consensus click for me personally lamport.azurewebsites.net/tla/paxos-algorithm.html
@vekmogo
@vekmogo 2 месяца назад
Great video, very clear and helpful! Also, nice title!
@nexovec
@nexovec 2 месяца назад
Turns out I've been using tigerstyle for the past 5 years and didn't even know. It's always good to see something put in writing that you've long subconsciously practiced, because then you can focus on it and audit it. This is helpful.
@YuruCampSupermacy
@YuruCampSupermacy 2 месяца назад
Could you plese zoom in a bit on your editor the next time? Its very hard to read the code if i am watching this on my phone
@8888anthoq88
@8888anthoq88 2 месяца назад
You should be able to zoom in yourself if you're using the RU-vid app
@nathanfranck5822
@nathanfranck5822 3 месяца назад
Matklad, it would definitely benefit you to unlearn the "uhhh" word. I think we tend to use it in conversation so the other party doesn't butt in and take the conversation in another direction, so it makes sense that we would have learned that behaviour in normal interactions with people... But in presentations I'd say it's a bad habit
@YuruCampSupermacy
@YuruCampSupermacy 2 месяца назад
I am guessing that English is not his mother tongue and despite that he has a really good command over the language, your comment is an unnecessary nitpick instead of constructive criticism. Even native English speakers overuse uhhh. It's a common filler word And if one is giving an impromptu presentation they will end up using filler words to gather their thoughts. It's not like he is speaking off of a script.
@nathanfranck5822
@nathanfranck5822 2 месяца назад
@@YuruCampSupermacy Yeah I totally get it, maybe I'm more sensitive than others, BUT if this was a college lecture you bet the students would be talking about it after class, comes with the territory
@JoeTaber
@JoeTaber 2 месяца назад
The key to unlearning "uh" is to become comfortable with silence.
@niskarshdwivedi1549
@niskarshdwivedi1549 3 месяца назад
00:03 Testing distributed systems is complex due to asynchronous communication and multiple computers. 02:39 Testing a Single-Node, Single Threaded, Distributed System 06:44 Testing for unknown unknowns is crucial for robust systems 08:41 Cost of solving bugs increases over time 12:42 Effectively testing a system requires comprehensive exploration of its state space. 14:42 Testing a distributed system can be challenging due to the difficulty in replicating bugs found by users. 18:37 Focusing testing energy on key points can significantly speed up algorithm performance. 20:38 Using Mario's x-coordinate as a guidepost for progress in the game. 24:03 Testing distributed systems often requires considering higher dimensions than initially anticipated. 25:55 Exploring incomparable and unique situations to find bugs in distributed systems. 29:39 Challenges in Branch Execution Order 31:46 Testing a single-node distributed system in 1985 revealed issues with random number generation. 35:22 Applying a mask with low probability makes random distributions more realistic. 37:15 Improving random number distributions for more natural movement and beating levels in old video games. 40:56 Developed a deterministic hypervisor for running software consistently. 43:05 Accessing the program via email subject line.
@themichaelw
@themichaelw 3 месяца назад
18:00 that's the same Andres Freund who discovered the XZ backdoor. Neat.
@klumpeet
@klumpeet 3 месяца назад
"State is building a database" Yes!
@ankishasharma7035
@ankishasharma7035 3 месяца назад
Great presentation!
@utkarshsrivastava2107
@utkarshsrivastava2107 3 месяца назад
This was awesome! Thank you for sharing.
@VipulVaibhaw
@VipulVaibhaw 3 месяца назад
This was mind blowing presentation.
@bobbycomputers
@bobbycomputers 3 месяца назад
The theme song really slaps!
@JoeTaber
@JoeTaber 3 месяца назад
The talk defines two terms: Strategy and Tactics. Strategy is the datum you choose to optimize for as the fuzzer randomly walks the states of the system. E.g. optimize to maximize Mario's X value, or optimize for reaching all tile positions etc. Tactics is the choice of input distribution.
@JoeTaber
@JoeTaber 3 месяца назад
My favorite deterministic simulator is Factorio (tbf I haven't tried TB). A deterministic hypervisor is dope!
@CTILET
@CTILET 3 месяца назад
Node js?
@trejohnson7677
@trejohnson7677 3 месяца назад
LOOOOL
@michaellatta
@michaellatta 3 месяца назад
Printing debugging is about looking for patterns of behavior, in particular with the output going into grep.
@biomorphic
@biomorphic 3 месяца назад
Correct me if I am wrong, but the static allocation is only possible because you do have few specific structures to allocate. All of these would not be possible if the client would send a completely different structure. I mean, your system would never be able to store anything but transactions, unless someone modifying the code, adds a different structure, and compile it. Am I right saying so, and is that the reason this database is so specific and cannot be used for any other use cases rather than financial transactions? I mean, even if you have some sort of metadata attached to the transaction, this has to have a fixed length, otherwise cannot be allocated statically.
@tigerbeetledb
@tigerbeetledb 3 месяца назад
Thanks for the great question. The static memory allocation happens in the foundational layer underneath the state machine, so it's orthogonal in fact to TB's choice of primitives (and specific structures). But yes, all structures at heart need to be some multiple of fixed size (e.g. you could do 64 bytes, 256 bytes, 512 bytes, 4 KiB page size etc. to accommodate variable length structures). However, this is no different to e.g. how languages like JavaScript in V8 do it (IIRC, variable strings are a minimum of 24 bytes).
@tenthlegionstudios1343
@tenthlegionstudios1343 4 месяца назад
These are great - I have only had time to watch the first two. I am using more Rust in my free time, but want to get into zig. Overall I find the code simple, safe, intentional, and efficient! Which is my goal. Really appreciate this deep dive series!
@tigerbeetledb
@tigerbeetledb 3 месяца назад
Thanks for the kind words! The rest of the videos will be there for when you have more free time! :)
@RonnieRedd
@RonnieRedd 4 месяца назад
Thank you!
@SebastianSativaLivemore
@SebastianSativaLivemore 4 месяца назад
The more I think about it, the more TigerBeetle and Redpanda seem like a perfect fit tbh
@Metruzanca
@Metruzanca 4 месяца назад
Tigerbeetle just knows what good music for their talks is.
@Metruzanca
@Metruzanca 4 месяца назад
NOW THIS IS HOW YOU MAKE A KILLER DEV TALK INTRO. Rockstar developers. Also I find it funny that it says "Iron Beetle" when thats image is a parody of Judas Priest.
@amidamarurookie
@amidamarurookie 4 месяца назад
hey, does the src code still up-to-date? i saw the last commit was 2 months ago
@tigerbeetledb
@tigerbeetledb 4 месяца назад
TigerBeetle is a bit of a moving target, so for this stream, I always look at that IronBeetle branch. I do update the branch periodically, just not for every stream, just to make sure that consequitve episodes look at the same code. Should probably sync with main before today's stream though...