Takip et

TableCraft – Üretim Ortamına Hazır Bir Veri Tablosu Motoru Nasıl İnşa Ettim?

TableCraft – Üretim Ortamına Hazır Bir Veri Tablosu Motoru Nasıl İnşa Ettim? Modern web uygulamalarında, büyük veri kümelerini kullanıcı dostu v…

TableCraft – Üretim Ortamına Hazır Bir Veri Tablosu Motoru Nasıl İnşa Ettim?

Modern web uygulamalarında, büyük veri kümelerini kullanıcı dostu ve etkileşimli bir şekilde sunmak, kritik bir gereksinim haline gelmiştir. Bu makalede, bu ihtiyacı karşılamak üzere sıfırdan inşa ettiğimiz, yüksek performanslı ve üretim ortamına hazır veri tablosu motorumuz TableCraft’ın geliştirme sürecini, mimarisini ve anahtar özelliklerini detaylı bir şekilde inceleyeceğiz.

Neden TableCraft’a İhtiyaç Duyduk?

Veri tabloları, iş uygulamalarının vazgeçilmez bir parçasıdır. Ancak, mevcut çözümlerin belirli senaryolarda yetersiz kalması veya özelleştirme esnekliğinin düşük olması, bizi kendi çözümümüzü geliştirmeye itti.

Mevcut Çözümlerin Sınırlılıkları

Piyasada birçok popüler JavaScript tabanlı veri tablosu kütüphanesi bulunmaktadır. Bunlar genellikle client-side rendering (istemci tarafı işleme) odaklı olup, küçük ve orta ölçekli veri kümeleri için harikadır. Ancak, milyonlarca satırlık veriyi işlemek, karmaşık sunucu tarafı filtreleme, sıralama ve sayfalama gerektiren durumlarda performans darboğazları yaşanabilir. Ayrıca, kurumsal düzeyde güvenlik, denetlenebilirlik ve esnek API entegrasyonu gibi konularda genellikle ek çaba gerektirirler. Bu tür kütüphanelerin genellikle belirli bir teknoloji yığınına bağımlı olması da, farklı projelerde adaptasyonu zorlaştırabilmektedir.

Ortaya Çıkan İhtiyaçlar

Projelerimizde karşılaştığımız temel ihtiyaçlar şunlardı:

  • Performans: Milyonlarca kayıt içeren tablolarda bile akıcı kullanıcı deneyimi.
  • Ölçeklenebilirlik: Veri hacmi arttıkça sistemin stabil kalması.
  • Esneklik: Farklı veri kaynakları (SQL, NoSQL, REST API’ler) ile entegrasyon.
  • Özelleştirilebilirlik: Dinamik kolon yönetimi, karmaşık filtreleme kuralları ve özel hücre renderlama yeteneği.
  • Güvenlik: Rol tabanlı erişim kontrolü ve veri güvenliği.
  • API Odaklılık: Herhangi bir ön uç teknolojisiyle kolayca entegre olabilen, iyi tanımlanmış bir API.

TableCraft’ın Vaadi

TableCraft, bu ihtiyaçları karşılamak üzere tasarlanmış, tamamen sunucu tarafı odaklı bir veri tablosu motorudur. Amacımız, ön uçtan gelen istekleri (sayfalama, sıralama, filtreleme) akıllıca işleyerek optimize edilmiş veritabanı sorguları oluşturmak ve sadece ilgili veriyi geri döndürerek performansı maksimize etmektir. Bu sayede, ön uç tarafındaki yükü azaltırken, geliştiricilere güçlü ve esnek bir araç sunmayı hedefledik.

TableCraft’ın Temel Mimarisi

TableCraft, modüler ve katmanlı bir mimari üzerine inşa edilmiştir. Bu yapı, bakım kolaylığı, esneklik ve ölçeklenebilirlik sağlamaktadır.

Katmanlı Yapı

TableCraft’ın mimarisi üç ana katmandan oluşur:

  1. API Katmanı (Presentation Layer): Ön uçtan gelen HTTP isteklerini karşılar, doğrular ve iş mantığı katmanına iletir. JSON tabanlı RESTful API’ler sunar.
  2. İş Mantığı Katmanı (Business Logic Layer): Gelen istekleri yorumlar, veri kaynağına özel sorguları oluşturur ve veri işleme mantığını uygular (filtreleme, sıralama, sayfalama).
  3. Veri Erişim Katmanı (Data Access Layer): Farklı veri kaynaklarıyla (veritabanları, harici API’ler) etkileşimi yönetir. ORM’ler veya doğrudan sorgular aracılığıyla veri alır ve döndürür.

Bu ayrım, her katmanın kendi sorumluluğunu üstlenmesini ve bağımsız olarak geliştirilip test edilmesini sağlar.

Veri Kaynağı Entegrasyonu

TableCraft’ın en güçlü yönlerinden biri, farklı veri kaynaklarıyla kolayca entegre olabilmesidir. Bir “Veri Kaynağı Adaptörü” deseni kullanarak, SQL (PostgreSQL, MySQL, SQL Server), NoSQL (MongoDB) ve hatta harici REST API’ler gibi çeşitli kaynaklardan veri çekebiliriz. Her adaptör, TableCraft’ın standart sorgu yapılarını (filtreler, sıralama, sayfalama) kendi veri kaynağının diline çevirmekten sorumludur.

Ön Uç ve Arka Uç İletişimi

Ön uç, TableCraft API’sine standart HTTP istekleri gönderir. Bu istekler genellikle şu parametreleri içerir:

  • page: İstenen sayfa numarası.
  • pageSize: Sayfa başına kayıt sayısı.
  • sortField: Sıralanacak kolon adı.
  • sortOrder: Sıralama yönü (asc/desc).
  • filters: Uygulanacak filtreler (JSON formatında, örn: { "columnName": "value", "operator": "equals" }).

Arka uç, bu parametreleri işleyerek veritabanından ilgili veriyi çeker ve aşağıdaki formatta bir JSON yanıtı döndürür:


{
  "data": [
    { "id": 1, "name": "Ürün A", "price": 100 },
    { "id": 2, "name": "Ürün B", "price": 150 }
  ],
  "totalRecords": 1000,
  "currentPage": 1,
  "totalPages": 50
}


Bu standart API sözleşmesi, TableCraft'ın React, Angular, Vue.js gibi herhangi bir ön uç çerçevesiyle sorunsuz çalışmasını sağlar.

Anahtar Özellikler ve Uygulama Detayları

TableCraft'ı üretim ortamına hazır hale getiren temel özellikler ve bunların nasıl uygulandığına dair detaylar.

Sayfalama (Pagination)

Sayfalama, büyük veri kümelerini yönetilebilir parçalara bölerek ön uca gönderilmesini sağlar. TableCraft, hem sunucu tarafı (server-side) hem de sanal (virtual) sayfalama stratejilerini destekler. Sunucu tarafı sayfalama, veritabanı seviyesinde OFFSET ve LIMIT (veya benzeri) komutları kullanarak yalnızca istenen sayfanın verisini çeker. Bu, ağ trafiğini ve ön uçtaki bellek kullanımını minimize eder.

Sıralama (Sorting)

Kullanıcıların herhangi bir kolona göre veriyi sıralayabilmesi, temel bir gereksinimdir. TableCraft, ön uçtan gelen sortField ve sortOrder parametrelerini doğrudan veritabanı sorgularına ORDER BY ifadesi olarak ekler. Çoklu kolon sıralama desteği de mevcuttur; bu sayede kullanıcılar birden fazla kolona göre öncelikli sıralama yapabilirler.

Filtreleme ve Arama (Filtering & Searching)

Karmaşık filtreleme yetenekleri, kullanıcıların aradıkları veriye hızlıca ulaşmasını sağlar. TableCraft, çeşitli filtreleme operatörlerini destekler:

  • Eşitlik (equals, notEquals)
  • Kapsama (contains, startsWith, endsWith)
  • Sayısal Karşılaştırmalar (greaterThan, lessThan, between)
  • Mantıksal Operatörler (AND, OR)

Ön uçtan gelen filtre objesi, iş mantığı katmanında ayrıştırılır ve veri kaynağına özel WHERE koşullarına dönüştürülür. Tam metin arama için, veritabanının indeksleme yetenekleri (örn: PostgreSQL'deki tsvector veya Elasticsearch entegrasyonu) kullanılır.

Dinamik Kolon Yönetimi

Her tablonun farklı kolonlara ihtiyacı olabilir ve bu kolonlar zamanla değişebilir. TableCraft, dinamik kolon tanımlarını destekler. Bir konfigürasyon dosyası veya veritabanı tablosu aracılığıyla, hangi kolonların gösterileceği, başlıkları, veri tipleri ve hatta özel renderlama kuralları tanımlanabilir. Bu sayede, ön uç uygulaması, TableCraft API'sinden kolon meta verilerini çekerek tablosunu dinamik olarak oluşturabilir.

Performans Optimizasyonları ve Ölçeklenebilirlik

TableCraft'ın üretim ortamında yüksek performansla çalışabilmesi için bir dizi optimizasyon ve ölçeklenebilirlik stratejisi uygulandı.

Veritabanı İndeksleme ve Sorgu Optimizasyonu

Performansın kalbi veritabanındadır. TableCraft, filtreleme ve sıralama için kullanılan tüm kolonlarda uygun veritabanı indekslerinin oluşturulmasını şiddetle tavsiye eder. Ayrıca, karmaşık sorguların EXPLAIN ANALYZE gibi araçlarla düzenli olarak analiz edilmesi ve yavaş sorguların tespit edilip optimize edilmesi esastır. Veritabanı adaptörleri, mümkün olduğunca veritabanı özelinde optimize edilmiş sorgular üretir.

Önbellekleme Stratejileri

Sık erişilen ancak nadiren değişen veriler için önbellekleme kritik öneme sahiptir. TableCraft, Redis gibi bir in-memory veri deposu kullanarak iki ana önbellekleme stratejisi uygular:

  1. Meta Veri Önbellekleme: Kolon tanımları, yetkilendirme kuralları gibi statik konfigürasyonlar önbelleğe alınır.
  2. Sorgu Sonucu Önbellekleme: Belirli filtre, sıralama ve sayfalama kombinasyonları için sıkça talep edilen sorgu sonuçları kısa süreliğine önbelleğe alınır. Veri değişikliği durumunda bu önbellek geçersiz kılınır (cache invalidation).

Asenkron Veri Yükleme

Özellikle çok büyük veri kümeleri veya karmaşık sorgular söz konusu olduğunda, veri yükleme işlemi zaman alabilir. TableCraft, ön uç ile asenkron veri yükleme mekanizması kullanır. Kullanıcı bir sayfayı ilk açtığında, boş bir tablo yüklenir ve arka planda veri çekme işlemi başlar. Veri geldiğinde tablo güncellenir. Bu, kullanıcı arayüzünün donmasını engeller ve daha iyi bir kullanıcı deneyimi sunar.

Güvenlik ve Veri Bütünlüğü

Üretim ortamı için güvenlik ve veri bütünlüğü, asla taviz verilmemesi gereken konulardır. TableCraft, bu alanlarda güçlü mekanizmalar sunar.

Yetkilendirme ve Kimlik Doğrulama

TableCraft, mevcut kimlik doğrulama sistemleriyle (JWT, OAuth2) entegre olacak şekilde tasarlanmıştır. Her API isteği, kullanıcının kimliğini doğrulamak ve o kullanıcının istenen verilere erişim yetkisi olup olmadığını kontrol etmek için bir yetkilendirme katmanından geçer. Rol tabanlı erişim kontrolü (RBAC) ile, farklı rollerdeki kullanıcıların farklı kolonları görmesi veya belirli satırları filtrelemesi sağlanabilir.

Veri Validasyonu

API üzerinden gelen tüm giriş parametreleri (sayfa numarası, filtre değerleri, sıralama kolonları vb.) kapsamlı bir şekilde doğrulanır. Bu, SQL Injection gibi güvenlik açıklarını önlemeye ve hatalı girişlerden kaynaklanan sistem çökmelerini engellemeye yardımcı olur. Örneğin, pageSize parametresinin belirli bir aralıkta olup olmadığı veya sortField parametresinin geçerli bir kolon adı olup olmadığı kontrol edilir.

Güvenli API Tasarımı

TableCraft API'si, RESTful prensiplere uygun olarak tasarlanmıştır ve HTTPS üzerinden iletişim kurar. Hata mesajları, potansiyel güvenlik açıklarını açığa çıkarmayacak şekilde genel ve bilgilendirici olacak şekilde yapılandırılmıştır. Ayrıca, API anahtarları veya JWT token'ları gibi hassas bilgilerin güvenli bir şekilde iletilmesi ve saklanması için en iyi uygulamalar takip edilir.

Geliştirme Süreci ve Gelecek Planları

TableCraft'ın geliştirme süreci, yinelemeli ve test odaklı bir yaklaşımla ilerlemiştir.

Teknoloji Seçimi

Arka uç için Node.js ve Express.js çatısını seçtik. Node.js'in asenkron yapısı, yüksek eşzamanlı istekleri verimli bir şekilde yönetmemizi sağlarken, Express.js hızlı API geliştirme imkanı sundu. Veritabanı etkileşimi için Sequelize ORM'i (SQL veritabanları için) ve Mongoose'u (MongoDB için) kullandık. Bu seçimler, hem geliştirme hızımızı artırdı hem de esnek bir mimari oluşturmamıza yardımcı oldu.

Test ve Dağıtım

Geliştirme sürecinde birim testleri, entegrasyon testleri ve performans testleri yoğun bir şekilde kullanıldı. CI/CD (Sürekli Entegrasyon/Sürekli Dağıtım) pipeline'ları, kod değişikliklerinin otomatik olarak test edilmesini ve üretim ortamına güvenli bir şekilde dağıtılmasını sağladı. Docker konteynerleri kullanarak TableCraft'ı farklı ortamlara kolayca dağıtabilir hale getirdik.

Yol Haritası ve İyileştirmeler

TableCraft sürekli gelişen bir projedir. Gelecek planlarımız arasında şunlar bulunmaktadır:

  • Gelişmiş Denetim Kayıtları: Veri değişikliklerini ve erişimlerini detaylı olarak kaydedebilme.
  • Çoklu Dil Desteği: Kolon başlıkları ve hata mesajları için çoklu dil desteği.
  • Özel Raporlama Entegrasyonu: TableCraft verilerini kullanarak özel raporlar oluşturma yeteneği.
  • Daha Fazla Veri Kaynağı Adaptörü: GraphQL API'leri veya bulut veri ambarları gibi yeni veri kaynakları için adaptörler geliştirmek.

Sonuç

TableCraft, büyük veri kümeleriyle çalışan modern web uygulamaları için sağlam, esnek ve yüksek performanslı bir veri tablosu motoru sunmaktadır. Modüler mimarisi, farklı veri kaynaklarıyla entegrasyon yeteneği, kapsamlı özellik seti ve güvenlik odaklı tasarımı sayesinde, geliştiricilere üretim ortamında güvenle kullanabilecekleri güçlü bir araç sağlamaktadır. Bu makalede anlatılan prensipler ve uygulama detayları, benzer ihtiyaçları olan geliştiriciler için bir başlangıç noktası veya ilham kaynağı olmayı umuyoruz.

SSS (Sık Sorulan Sorular)

TableCraft hangi ön uç teknolojileriyle uyumludur?

TableCraft, RESTful API'ler sunduğu için React, Angular, Vue.js gibi herhangi bir JavaScript tabanlı ön uç çerçevesiyle veya hatta sunucu tarafı renderlama (SSR) kullanan uygulamalarla uyumludur.

TableCraft'ı mevcut bir projeye entegre etmek ne kadar sürer?

Entegrasyon süresi, projenizin karmaşıklığına ve veri kaynaklarınızın yapısına bağlıdır. Ancak, iyi tanımlanmış API'si sayesinde temel bir entegrasyon genellikle birkaç gün içinde tamamlanabilir. Veri kaynağı adaptörlerinin ve güvenlik katmanlarının yapılandırılması ek zaman alabilir.

Büyük veri kümeleriyle çalışırken performans sorunları yaşar mıyım?

TableCraft, sunucu tarafı sayfalama, sıralama ve filtreleme ile veritabanı optimizasyonlarına odaklanarak büyük veri kümeleri için tasarlanmıştır. Doğru veritabanı indekslemesi ve önbellekleme stratejileriyle birlikte kullanıldığında, milyonlarca kayıtla bile yüksek performans sunar.

TableCraft'ın lisans modeli nedir?

Bu makalede anlatılan TableCraft, bizim dahili projemiz için geliştirilmiş bir çözümdür. Ancak, açık kaynaklı bir sürümünü yayınlamayı veya ticari bir lisans modeli sunmayı değerlendirebiliriz.

TableCraft'ı özelleştirmek mümkün müdür?

Evet, TableCraft'ın modüler mimarisi sayesinde oldukça özelleştirilebilir. Kendi veri kaynağı adaptörlerinizi yazabilir, özel filtreleme mantıkları ekleyebilir veya mevcut API'yi genişletebilirsiniz. Kolon tanımları da dinamik olarak yapılandırılabilir.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Mobil sürümden çık