 Saya akan beritahu daripada Jack dan Lupe. Sebelum saya bertanya kepada mereka, saya akan beritahu kamu sebuah istri data-base operations interaction. Sebenarnya, saya adalah orang yang hanya melakukan kerja data-base administrasi. Jack datang pada bulan 2050. Dan Lupe datang pada bulan 2060. Jadi, Jack adalah... Jika kamu mempercayai saya, Jack adalah pengalaman terbaik kerja data-base operations. Jadi, perkara yang paling menarik adalah... Kita terus melakukan perkara baru. Kita terus melakukannya. Perubahan berubah. Jadi, perubahan selalu berbeza. Setiap beberapa bulan, kita harus belajar perkara baru. Jadi, saya akan beritahu Jack dan Lupe dan beritahu kamu sebuah istri data-base operations. Hai, semua. Saya Lupe. Saya pengalaman data-base operations. Jadi, hari ini, sebuah pekerja yang hebat untuk saya berada di sini untuk berada di sini dengan kamu semua. Pada hari ini, saya akan beritahu cara mempercayai kerja data-base operations. Jadi, di selanjutnya, kita akan melakukan perubahan perubahan perubahan data-base. Bagaimana yang menikmati peluang kita? Bagaimana problema yang kita l früher melalui? Bagaimana perbaiki perubahan? Bagaimana peraburan kita? Bagaimana perubahan data-base? Bagaimana perubahan terbaik untuk berlaku? Bagaimana perubahan data-base? Jumpa lagi. So, kita bersiap dengan... Kita bersiap dengan perubahan data-base. So, dari yang pertama, kita hanya mempunyai sebuah database, yang juga main-db. Kita juga mempunyai replikasi data untuknya. Pada masa itu, kami hanya mempunyai AWS Corewatch sebagai kebenaran. Jadi, kami dapat melihat artisannya. Semua pembentangan kami sebenarnya dikatakan dengan main-db. Kami menggunakan separations yang terbaik. Jadi, semua pembentangan yang berlaku dengan main-db dan semua pembentangan yang berlaku dengan replikasi. Kami juga mempunyai perlukan yang panjang dengan perlukan yang panjang. Kami juga mempunyai perlukan yang panjang. Jadi, ada tiga masalah yang berlaku dengan main-db. Pertama, kami merasa seperti kami tidak mempunyai perlukan yang berlaku dengan main-db. Seperti yang saya beritahu, kami hanya mempunyai AWS Corewatch sebagai kebenaran. Jadi, apabila masalah berlaku, kami dapat melihat pembentangan CQ, IOSPY, atau replikasi. Tapi kekensi-kekannya kami tidak mempunyai idea mengapa ia mencabar perkara. Jadi, kami mahu mempunyai lebih banyak perlukan database. Pertama, kedua masalah kami dapat menghasilkan database. Tapi kami dapat menghasilkan apa yang bermakna. Kami semua tidak mempunyai database. AWS mempercayai kebenaran yang berlaku dengan main-db. Kami mempunyai perlukan yang berlaku dengan main-db. Jadi, apabila kami merasa seperti perlukan-perlukan-perlukan-perlukan-perlukan, kekensi-kekannya kami dapat menghasilkan perlukan-perlukan-perlukan-perlukan-perlukan-perlukan-perlukan. Tapi kekensi-kekannya kami sudah menghasilkan kekensi-kekannya yang terbaik yang kami dapat lakukan. Terakhir adalah, kami hanya mempunyai satu replikasi yang mempunyai untuk membantu perlukan-perlukan. Jadi, apabila pembentangan CQ berlaku, dia menghadiri replica analaktik yang meng CHRISK menyifat perlukan KKL. Jadi, pepper kita mencatatkan main-db ini adalah pembentangan CQ JAMES Kali ini, kami mencontok pembentangan CQ dengan perlukan TQ Computer KK også menggambau Pada masa itu, kita juga mula menggunakan VivoCod sebagai terserah mempunyai lebih banyak informasi tentang apa yang berlaku dalam database. Jadi, pada akhir 2015, kita sudah mempunyai 50 plus database. Jadi, ini adalah pembinaan. Kita dapat melihat bahawa pada masa itu, seperti pembinaan yang berlainan sudah bercakap dengan database sendiri. Sebenarnya, dengan menggunakan perjalanan ini, kita akan menggantikan perjalanan yang berlainan pada mainan kita. Dan sebenarnya, kita juga akan memastikan perjalanan yang berlainan sebelum berlainan. Di antara perjalanan yang berlainan, jika sesuatu yang salah berlaku pada database ini, sebenarnya, perjalanan yang berlainan masih boleh berlainan. Jadi, saya melihat perjalanan ini berlainan dengan banyak masalah, tapi ia tidak sempurna dengan masih memiliki perjalanan baru. Jadi, itu adalah tiga masalah yang kita ada. Pertama, seperti yang saya katakan, setiap pembinaan hanya memiliki satu RIPika. Jadi, ia tidak dapat membantu perjalanan yang berlainan. Jadi, kita berfikir mungkin kita akan membuat perjalanan yang berlainan untuknya. Pertama, kita mula menggunakan perjalanan berlainan pada perjalanan, tetapi kami masih tidak memiliki perjalanan. Kita ingat ada masalah yang harus berlainan pada hari ini. Sebuah hari yang kita melakukan perjalanan, sebenarnya, kami mengajar bot Mexico. Jadi, database terdapat. Tapi ia tidak selesai. Jadi, ia tidak mengajar perjalanan yang berlainan. Jadi, kita tidak memiliki perjalanan pada masa itu. Jadi, ia berlainan pada masa yang lebih daripada satu jam. Jadi, saya berfikir tentang menambahkan perjalanan kita sendiri untuk menambahkan lebih banyak perjalanan. Pertama, ketiga adalah... Pada perjalanan pertama, kita akan mempunyai lebih banyak perjalanan, tetapi kami masih ingin tahu lebih banyak perjalanan. Jadi, saya rasa ia mungkin untuk saya berhenti di sini. Saya akan meminta Jack untuk memberitahu anda lebih banyak berlainan tentang bagaimana kita menolong perjalanan ini. Dan apa adalah perjalanan kita sekarang? Ini adalah perjalanan yang berlainan. Mari kita jumpa lagi. Terima kasih, Jack. Saya Jack, perjalanan database di Grapp. Terima kasih, Lubek. Di sini, kami melihat beberapa masalah untuk perjalanan perjalanan yang kita melihat. Jadi, bagaimana kami melihat ini? Maaf. Jadi, kami menggunakan perjalanan perjalanan. Seperti yang kita katakan, hanya satu perjalanan untuk satu perjalanan. Jadi, satu perjalanan tidak dapat mendukung semua operasi di Grapp. Sebab itu, kami akan membuat beberapa perjalanan untuk satu perjalanan untuk berbeza. Seperti yang kami sudah berlainan pada perjalanan kita, kami masih rasa seperti kami membuat perjalanan. Kami ingin perjalanan lebih banyak untuk mendapat lebih banyak perjalanan. Jadi, kami sudah mulai untuk membangun perjalanan kita sendiri. Pada masa itu, kami sudah memiliki lebih daripada 200 perjalanan database. Di platform AWS. Jadi, ini adalah cara kita membuat perjalanan pada masa itu. Jadi, dari sini, anda dapat lihat perjalanan pertama yang kita melihat. Sebenarnya, perjalanan adalah aplikasi Reptica 2. Dan perjalanan lain adalah aplikasi Reptica A. Jadi, kami juga dapat membuat perjalanan yang berlainan di aplikasi Reptica. Jadi, kami menggunakan perjalanan ini untuk mengubah perjalanan yang berlainan untuk membuat perjalanan lebih cepat untuk membuat perjalanan yang berlainan. Di sini, saya akan memperkenalkan perjalanan kita semua. Macam mana kita mula membuat perjalanan untuk memperkenalkan MySQL. Jadi, sebenarnya, seperti kita tahu, di MySQL 5.6, tiada masa untuk membuat perjalanan perjalanan. Mereka memperkenalkan perjalanan yang berlainan di 5.7. Jadi, kami memperkenalkan perjalanan yang berlainan. Dengan kami, kami cuba memperkenalkan perjalanan ini yang berlainan beberapa jam. Kerana kami membuat perjalanan yang berlainan beberapa jam, tapi tidak ada siapa yang memperkenalkan. Di akhir, kami membuat banyak masalah seperti SPAQ CPU ini. Jadi, kami juga memperkenalkan perjalanan yang berlainan. Dengan memperkenalkan perjalanan yang berlainan, kami memperkenalkan mereka bersama. Ya. Mereka akan memperkenalkan perjalanan yang berlainan. Oh, yang ini? Tidak, kamu mungkin memperkenalkan. Oh, tak mengapa. Untuk kedua, memperkenalkan perjalanan yang berlainan lebih menyayangkan dengan Gira. Jadi, kami menggunakan sesuatu yang diperkenalkan dengan PTT perjalanan yang dilakukan dengan menyayangkan perjalanan yang berlainan. Selepas itu, kami menghentikan semua perjalanan yang berlainan bersama. Kemudian, kami memperkenalkan dengan Gira. Jadi, kami melakukan perjalanan perjalanan untuk berkata, ada beberapa perjalanan yang berlainan, dan melakukan perjalanan yang digarung Kita juga mempunyai log-log-log ke Scala dan kita juga memperkalkan alat untuk memilih. Kerana kita menggunakan alat untuk menghubungi, kita memperkalkan alat. Setiap kali apabila sesuatu salah, kita dapat mengambilnya dengan cepat dan memperkalkan alat untuk memastikan aplikasi kita bergerak dengan baik-baik. Kita juga mempunyai alat yang menggunakan alat untuk memperkalkan alat. Apabila perangkatan memperkalkan alat, kita perlu mempunyai alat yang tidak memperkalkan alat. Jadi kita memperkalkan alat yang tidak memperkalkan alat untuk memperkalkan alat untuk setiap serva, setiap minit. Apabila kita menggunakan alat untuk memperkalkan alat untuk memperkalkan alat untuk setsiap minit, setiap minit. Kami memperkalkan alat untuk memperkalkan alat untuk setiap minit. KAM RunKey terambang kita memperkamang alat hastิt – lived so sta ketua {\ storms nourierer plot to lead the person of the slides photomintus. dan mempunyai sisi konfigurasi yang digunakan di sini. Dalam itu, kita mempunyai sisi konfigurasi yang mempunyai pilih dari pilih PTA dan membuat periuk PTA mengenai pilih seperti ini. Tentu saja, kita akan memperkalkan sisi konfigurasi. Dan juga, kami mengambil pengetahuan ke S3. Dalam periksa data basa, kita dapat menyebabkan keadaan seperti ini sebelumnya. It makes us be more visibility for our database. So what's the issues we met? We still need to manually to work on the daily database operations. Let's say we need to create a user for developers. They want to query our database. We don't share the user. So for each developer, we create a dedicated user for them. So we still need to do this manually. The second thing is that there is a lack of standard workflow for database operations. Because before they join, I'm the only one to do all of these things. So we are lack of the standard workflow to the database operations. They were causing issues if one day I forgot. So we are trying to standardize all these kinds of operations. And also a third thing, there is no checking for all the changes in the database. Let's say we need to add one more column into one table. So there is no checking for these changes. So we are trying to solve all of these issues. So what's the next upgrade? Currently we are building our gap, which is called Brad Automation Platform. Since we have more resources at this moment. So the target is we automate 90% plus of the operation works. So the final target is done. We don't want to do any work. We just let the system to do that. And also we are going to standardize all the workflow for the database operations. It will help us a lot. Besides that, we are also trying to check all the changes in the database. Because if something happens, we still have this kind of history. We can check back to see what changes. So what's causing the issues? Okay, so what's next? We are trying to time pass our infrastructure. We are still exploring. So of course AWS Alura is one of our choice. We are also considering to run MySQL or EC2 to have more flexibility compared to RDS service. So data sharding, proxy SQL, spider engine, maybe grab sharding. We are trying to build ourselves. MySQL cluster is also a choice. Like Galera and InnoDB cluster. So we are also considering like geo shardings. Think we are running like across source session. We are thinking about that. So okay, as long as I mean the lessons we learned for these two years since I joined grab in 2015. So I feel like databases are probably the most complex things in our stack. Because every service needs to communicate with the database. So it makes the database much more complicated to troubleshooting, to performance tuning, this kind of stuff. So please understand your database and use it correctly. And also take time to understand at a deeper level and it will become more important as you scale and measure. And also we are trying to always try to scale up instead of scale up. Can you elaborate? Can you elaborate on the third one? The third one? The third one. So it's put on the scale up. Because we are as Lubeh mentioned before, once you scale up, usually it's like you upgrade your instance type. There is a limitation. Let's say for currently our ideas, the maximum you can upgrade to 8x. But if let's say you already update your database to 8x, there are some issues happens, you are not able to solve it. We are trying to go through this way. We add more servers, able to solve it. Then we will consider the scale up instead of scale up. So this is the final thoughts. MySQL. So almost every major technical companies they are using MySQL in certain forms. So I feel MySQL is really flexible. If you understand well, and you can hack it to suit your requirements. And also we see a lot of improvements for MySQL in recent years. So we are still trying to use it as much as we can. Questions and answers. So how is it going to help you for your RTO and RTO rather than using on ideas? Question again? Okay, the question is, in one of the slides you mentioned, you are going to provide an implicit instance. So how is it going to help you for RTO and RTO as compared to having on ideas? So we are looking at running some of our MySQL servers in EC2 mainly because we want to have more flexible topology. We can do a few more different things when we run it on EC2. We can access and tune certain parameters that are not exposed if we are using ideas. So we are looking at very specific use cases and most of those are around performance and higher availability than what can be provided by the automated fill of mechanism that is available in ideas. So we are only looking at using EC2 when there are specific limitations of ideas that we cannot work around. So that's why we are looking at EC2. At the moment, I don't think we are looking at replacing everything and running it in EC2. You said that you had long-running SQL queries because typically it means writing for CPU and then it will be done. Yes. What kind of queries are long-running? I think let's say you are running a full table scan. Your table is too large. Of course, we can see that you are consuming more resources to finish your queries. But if your table is too large, you may not be able to finish it. Ya. We didn't few hours. Just curious, your two transactional queries and analytical queries in the same database or your split into offline data warehouse and production data. Ya, no, I forgive. So, there's two different questions. I'll answer the analytical one first. So we don't do analytics on MySQL. We used to do analytics on MySQL but it was also a separate MySQL. If you're trying to run analytical queries in production MySQL database, you're just asking for trouble because it will lock up everything because those queries are meant to be sold and you don't run it on the database that's meant to run fast. So now, architecture is we sub-curve data out of MySQL. So the data engineering team has a lot of queries, ETL queries that pull data out of MySQL databases. We use to use a data warehouse called Ratchet in AWS very heavily. Right now, we've also changed architecture a bit to use the S3 as our data link and we run EMR classes and we run the Presto Core engine. So that is our analytics. As for transactional queries, we... Generally, we don't use we don't run transactions in MySQL. So we use MySQL but we don't use transactions. We don't run complex joins. We don't run a lot of the things that actually require MySQL. We use it a lot more almost like a key value stock if you want to say that but with a SQL query engine on top. So we made that decision quite early on because that simplifies a lot of things, just to scale up much easier. So but in certain use cases like the financial transactions, those we will of course go for where the transaction where asset is required we use it but most of the time those things are not required so we don't use most of the time. I think that's a good question. Ya, I have another question. My name is Goran. Can you tell us the top 5 service endpoints which generate so much more than your data? Why or whether you're using caching or not? I don't know. Do you know what endpoints are? I don't know. I cheat or not. I get the two questions. One is on caching. Ya, for the first one we definitely do caching and that was illustrated in the first slide where it said we pretty much have elastic cache in front of the DV and everything gets put into elastic at one point and we leave from there in times. With regards to what causes the main load and there's two aspects first one is our operations portal internally we call it Tema basically you know you have your customer service team they will get a call from a driver so they do some search queries you know business teams they'll be like how many bookings are we doing so they'll be doing search queries which generally are not fast so they'll be like and all of these drivers in this driver group go to take a few seconds and press so those are not in terms of throughput they're not they're pretty low but in terms of quite speed they're quite slow in terms of throughput it's mainly if you use graph while you're waiting for your driver to come that has huge number of operations because we're getting driver locations every second we're you know looking up each time we're hitting an API call every second back to the server and so that's so people will get throughput that's great so that's probably the best so you said you're trying not to use joints can you expand over how do you manage to have such complicated system and not utilize a lot of joints so essentially then you just join it in your code so you make your code query across the different data sources that you need to access and then do whatever manipulation you want inside your code so that means the 200 databases you have this is what you can do is you don't need to join them so you can yeah so it's designed in such a way that every single database so all the tables that reside in different databases usually belong to a specific service so that data doesn't need to be joined that's our POI service doesn't need to have data join against our booking service because they are completely dependent services so internally in a POI service they might join certain things but generally we run very few joints doesn't mean if your data is denormalized like I would assume there's a lot of names that every service will need to know about for a file or something like that yes most of the data is quite denormalized so we don't do a lot of what you will call textbook proper database design normalizing everything properly so we design the database for performance and for ease of operation and for scalability not necessarily for like storage or for hack and for for the usual reasons what you would normalize the database yes so last one before we move to the next one can we share some learning so design trade-offs around choosing function keys for sharding we don't shard different kind of sharding so we shard we shard at the service level so for every group or every action it has a as a service so let me repeat so when I say we don't shard when people say sharding is usually like one table distributed across multiple databases each database contains a specific subset of the data we don't do that kind of sharding but how we shard is like how I just mentioned we shard different services have each of their own individual databases sometimes one service might access data across 3 or 4 different databases and each database just contains one massive table so it shard like that but it's not what people usually say so this kind of sharding doesn't involve partition keys or anything so it's actually much more straightforward to include okay so let's go for the first time we still have some time for question and answers if you still have we will go to them at the end