Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?

Öncelikler hayırlı günleriniz olsun. Özel kamu kurumunda personel olarak çalışmaktayım. Kurumumuzun genel merkezinde ihale usulü firmalara yazılımlar, mobil uygulamalar vb. yaptırılmaktadır. Tabi ihaleyi alan firma projeyi gerçekleştirdikten sonra sistem çalışması dışında herhangi gelişim göstermiyor. (Güncelleme, yeni özellik vb.) bu da yıllar içinde yeni sorunlar doğuruyor. Velhasıl;

Kurumuzun yazılımlarının eksik yönü fazlaydı bende bizim ilde kurum için alternatif yaptım. Kurumumuz tarafından çok beğenildi. Bu seferde Kurumun genel merkezinin dikkatini çektim (ki orada da 2 sene önce sunum yapmıştım benden sonra benim sunumu başka firmaya ihale usulu vermişlerdi.)

Şuan bir heyet ön ayak olacak eğer olursa paçayı kurtaracam 😃 ve tabi büyük proje olduğundan sorular/sorunlardan nasıl baş ederim fikirlerinize ihtayacım var.

Proje (7) adet veri tabanından oluşmaktadır. laravel - mysql (elasticsearch vb.) kullanmaktadır. online çalışan web portal ve mobil uygulamadan da kullanılmaktadır. (mobil uygulama kısmı şuan çalıştığım kurumda yok.)

1. Soru: Bizim ildeki kurumda 500 kişi kullanıyor. Ama Türkiye geneli olduğunda tüm iller ve ilçelerde kurumlarımızda (500 bin kişi kullanacak) ve 1-2 ay gibi sürede milyarlarca veri olacak. Mysql limiti olduğunu biliyorum. direk projeyi nasıl tasarlamalıyım ? Büyük projelerde o kadar veriyi kontrol için acaba firmalar mı bakıyor veya cloud sistemlerimi tecrübem olmadığından bilmiyorum.

2. Soru: projede mobil uygulama olacağı için ben önyüzü vue arka tarafı api şeklinde laravel ile tasarlarsam mobil uygulama için hem kolaylık olur. Diye düşünüyorum bu şekilde yeterli olur mu ?

3. Soru: Para işlemlerinde mysql da varchar yapıp php number format ile işlemler yapıyordum. Bu hatalı mıdır kimisi decimal 9 kullanıyor?

Özet: eğer olursa 50 - 100 milyonluk ihaleyi almış olacağım ( ki yedirmezlerde ) olursa büyük veri anlık çok kullanıcı ile işlemlerden oluşan proje). nasıl kurtarırım bu işi.

    Mysql bu tür sistemlerde sıkıntılı sanki
    Mssql yada Oracle yada postgresql sanki daha uygun gibi
    Bende sürü takip yazılımı yazdım tekil kullanıcı idi ama günlük min 10k veri oluşuyordu sadece 3 işlemde o yüzden Offline bir sistem olarak tasarladım
    Hatta @mgsmus hocamdan iyi biliyor hangi proje oldugunu çok yardımcı olmuştu

    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.

    öncelikle ayrı ayrı çok teşekkür ederim. Proje genel hatları ile şu şekilde.
    video portalı
    fatura sistemi (kesme indirme ve pdf görüntüleme)
    belge arama (milyon veri) (elastic)
    hesaplama araçları (basit araçlar)
    iş takibi sistemi
    dananın kuyruğunun koptuğu kısım abi. iş tabi bizim ildeki kurumda kayıt 250 binde sorunsuz devam ediyor. iş takibi harici diğer kısımlar hem veri sabit hem de ilgi veri fazla değil. bu iş takibi kısmı tüm türkiyede devreye girerse 500 bin kişi kullanacak burada (word, excel oluşturmadan tut, parasal işlemler, kişinin bakiyesi var mı ? paket usulü de satılacak vb. işlemler giriyor.)

    Önyüz vue arkada api laravel (mobile de hazırlık)

    Mustafa abi bu duruma göre bir kaç sorum var. cevaplarsan makule geçer abi. Olayın iç yüzü şudur; kurum yetkileri senle ortak olalım ihaleye şirket şeklinde girelim programların güzel dediler ve kullanıyorlar da ana merkezden ihaleyi almak için refarans bulacaklar ben burada parama bakayım diyorum 😃

    konuya dönecek olursam benden öncelikle bir maliyet hesabı istiyorlar sistemi kaça hazırlarsın ve sonraki aşamada masraf ne olur diyorlar. Aylık 500-750 bin geliri olan sistem bende bu ihaleyi kaçırmak istemiyorum.

    1. sistemi senin belirttiğin gibi tasarlarsam Amazon AWS gibi ölçeklenebilir bir alt yapı ortalama fiyatı nedir abi?
    2. api şeklinde yazarsam mobil uygulamayı firmalar ortalama kaça yazar ?
    3. proje birden büyüdü sonuçta ben bir kişiyim bu işe sizin gibi firmalar aylık bedel karşılığı bakıyor mu? tahmini ne kadardır ?
    4. sistem bakımı yapan ve ilgilenen firmalar var mı (it takımı diye mi geçiyor bilmiyorum)

    sorularım sizlere göre basit olabilir mağrur görürseniz sevinirim hiç büyük projede yer almadım hobi amaçlı yapıyorum. Fırsatta önüme geldi kaçırmayım diyorum 4 kişi ortak gireceğiz 3 kişi (5 milyona kadar yatırım yaparız diyorlar) kurtarır mı bu paralar. ben vue/ laravel api yazsam yayına başlar lakin işin milyon veri anlık kullanıcı sayı kısmı korkutuyor.) sonuçta ileride veritabanı analiz vs. devreye girecek yada yayına başlayınca siz gibi firmalar abi destek sağlar mı aylık vb. ücretle ? tekrardan teşekkür ederim.

      Cloud en mantıklısı ve firmalar teknik destek kısmına sanırım ancak kendi yazılımlarına teknik destek verir freelancer lar ise güven meselesi
      Ama büyük proje den ziyade big data sizin iş
      Mustafa hocamın da dedigi gibi projeyi eskiz olarak tasarlayıp her detayı inceleyip sonrasında yazılım kısmına geçmeniz daha mantıklı
      Maliyet kısmı ise cloud ta isterlerniizi göre araştırmanız gerekecek

      RamazanKF Firmalara hizmet veren DevOps firmaları, mobil uygulama yazan firmalar, uygulamayı sahiplenen firmalar vs hepsi var ama fiyat konusunda bir şey söyleyemiyorum. LinkedIn'de bu firmaları bulabileceğinizi düşünüyorum, onlarla konuşabilirsiniz.

      Anlattığınız gibi bir ölçek varsa ayda en az 2-3 bin papel Amazon'a gider gibi duruyor ama bu Amazon'da startup kredileri oluyor, yıllık size 25 bin dolar ücretsiz kredi veriyor. Amazon ile çalışan DevOps firmaları bu konuda size danışmanlık verir.