RamazanKF Verinin çokluğu çok önemli değil, sadece çok daha fazla disk ve ram'e ihtiyacınız olacak. O yüzden Amazon AWS gibi ölçeklenebilir bir alt yapı tercih etmeniz gerekecek (Tabi yedekleme, güncelleme gibi işlemlerde de AWS işinizi kolaylaştıracak, bunları da unutmamak lazım). MySQL, PostgreSQL vs hepsinin görevi bu, milyar satır olunca veri tabanı kaldırmaz diye bir şey yok; yanlış tasarlanmış veri tabanı ya da yetersiz donanım var. Ayrıca connection pooling nedir araştırın.
Veri sayısı arttıkça bazı sorunlarla karşılaşacaksınız. Mesela en basit silme işlemi bile silinecek kayıt sayısına göre saatlerinizi alacak. İndekslemeden bahsetmeme zaten gerek yok ama asıl bilmeniz ve uygulamanız gereken partitioning. Şimdiden ne olduğunu iyice öğrenip ona göre tasarlamanız lazım (mevcut bir tabloya sonradan partitioning uygulayamazsınız)
https://dev.mysql.com/doc/refman/8.0/en/partitioning.html
Yanlış indeksleme size pahalıya patlar bunu da söyleyeyim. İçinde milyonlarca veri olan bir tabloya sonradan index atmanız saatler belki günler sürebilir. Bu süre zarfında tablo kilitlenir, kilitlenmesin diye concurrently indeksleme yapmanız gerekebilir ki bu tabloyu kilitlemez ama daha da uzun sürer. O yüzden veri tabanından emin olmadan yayına almayın. İndeks çeşitleri ve etkilerini öğrenin.
Uygulamanızı API olarak yazın, sonra ister mobil olsun ister web sayfası, istediğiniz istemciyi beslersiniz. Farklı farklı istemciler, 3. parti istemciler vs bağlanacaksa Sanctum yerine Passport kullanmayı düşünebilirsiniz, OAuth olduğu için istemcilerin entegre olması kolay olur.
Parasal işlemlerde iki alan kullanılır; DECIMAL ya da BIGINT. VARCHAR kullanmanız özel bir sebebi yoksa tabi ki yanlış. DECIMAL kullandığınızda DECIMAL(10, 2) gibi kullanırsınız. 10 paranın toplam hane sayısı, 2 ise kuruş kısmıdır. Bu tanımlaya göre saklayabileceğiniz maksimum para 99999999.99'dur. Daha fazlasına ihtiyacınız varsa arttırırsınız. 2 haneli kuruş ise normal parasal işlemler içindir, borsa ya da kripto için yetmez, örneğin bitcoin için 8 hane kullanılır. BIGINT ise; parasal işlemi yaptıktan sonra 100 ile çarpıp tamsayıya çevirir ve veri tabanına öyle kaydedersiniz, işlem yapacağınız zaman ise işlemi yaparsınız ve sonucu 100'e bölerek kuruşlu normal olanı elde edersiniz. DECIMAL BIGINT'e göre daha basit olduğu için genelde DECIMAL tercih edilir. BIGINT de çok güzel kuruş hatalarının önüne geçer ama zahmetli. 2 haneli kuruşla çalışan parasal bir işlem yaptığınızda 55.99 yerine 55.9987 gibi bir şey elde ettiyseniz bir şeyi yanlış yaptınız demektir. Bunu zaten 55.99 diye kaydedecek diye sakın veri tabanına yazmayın.
Para, her ne kadar sayı gözükse de aslında matematiksel bir ifadedir. Her türlü işlemi uygulayamazsınız. Örneğin parayı bölemezsiniz; pay edersiniz. 10 TL'yi 3'e bölerseniz 3 tane 3,33 elde edersiniz ve 1 kuruş artar. Ya 3,34 3,33 3,33 ya da 3,34 3,34 3,32 gibi pay edeceksiniz ya da yapılan işlemi bir yerde tutup o artan 1 kuruşun kaydını tutacaksınız. İşlemin sağlamasını yaptığınızda aynı değere ulaşabilmeniz lazım yoksa ay sonuda yapılan işlem hacmine göre yüzbinlerce lira bile açık verebilirsiniz. Bu yüzden para teorisi ile hareket etmeniz lazım. Bu sağlayan, kullandığım güzel bir paket mevcut: https://www.moneyphp.org/en/stable/ Alternatif ise (hiç kullanmadım) https://github.com/brick/money
Genel olarak tavsiyem, kod yazarak başlamayın. Gerekirse 3-4 ay hiç kod yazmayın. Önce projeyi kağıt üzerinde bitirmeye çalışın ve alt yapı ile ilgili araştırma yapın.