Veritabanı Tasarım Amaçları ve İhtiyaçlarının belirlenmesi (IoT Veritabanı)

Merhaba değerli dostlar. Bu makaleden itibaren sizlerle birlikte bir veritabanı tasarlamak için takip etmemiz gereken adımları akademik bir yaklaşım ile sizlere sunmaya çalışacağım. Amacımız Internet of Things yani Nesnelerin İnterneti kavramına hizmet eden ve IoT ekosisteminde bulunan cihazları kayıt edeceğimiz bir veritabanı oluşturmayı sağlamaktır. Projemizin ismi “IoT Veritabanı”, veritabanı yönetim sistemi ise “PostgreSQL” olacaktır. Bu veritabanı yönetim sistemi dünya genelinde hızla yayılmakta ve tercih edilmektedir. Bu ilk makalenin amacı oluşturacağımız Veritabanı Tasarım Amaçları ve İhtiyaçlarını Belirleme üzerine olmalıdır. Çünkü veritabanı oluşturmadan önce amaçları ve ihtiyaçları ayrıntılı olarak ele almak gerekiyor. Haydi başlayalım o zaman….

NOT: Veritabanı Yönetim Sistemleri hakkında ayrıntılı bilgileri burada vermeyeceğiz. Eğer konu hakkında bilgi sahibi olmak isterseniz, İnönü Üniversitesi Bilgisayar Mühendisliği bölümünde Akademisyen olarak görev yapan Dr.Öğretim Üyesi Ahmet Arif AYDIN hocamızın şu linkte bulunan ders sunumlarını inceleyebilirsiniz.

Veritabanı Tasarım Amaçları ve İhtiyaçlarının belirlenmesi

IoT tabanlı uygulamalara olan ihtiyaç her geçen gün artmaktadır.  IoT uygulamalarında amaç; farklı elektronik cihazların birlikte çalışarak dijital bir ekosistem oluşturması, iş veya işlemlerin otomatik bir şekilde yapılması ve insan faktöründen kaynaklanan hataların en aza indirgenerek ihtiyaç duyulan ekosistemin kararlı bir şekilde çalıştırılmasıdır.  Bu projemiz, IoT uygulamalarının backend yani merkezini ilgilendiren bir çalışma olacaktır. Ayrıca, kuracağımız bu veritabanı ile seralardan evimizdeki odalara, ofislerden fabrikalara kadar birçok alanın temel ihtiyaçları karşılanacaktır. IoT uygulamaları bir ihtiyaçtan öte zorunluluk arzeden bir durumdur. Çünkü Cisco firmasının yaptığı bir araştırmaya göre,  2020 yılında 50 milyardan fazla cihaz internete bağlanacaktır. Bu muazzam rakam hesaba katılırsa bu cihazlardan gelen verilerin analizi oldukça önem arz ediyor. Bu da yapacağımız projenin global ölçekte çok önemli olduğunu hatta en büyük ihtiyaçlardan birini gidermeyi hedeflediğini göstermektedir. Ayrıca şunu da belirtmekte yarar var; Microsoft, Oracle ve özellikle Amazon gibi büyük firmaların bulut tabanlı sistemlere yatırım yapmasının en büyük nedeni şüphesiz 50 milyardan fazla cihazın veri analizi ve veri depolama ihtiyaçlarını karşılamaktır.

Projemizin genel amaçlarından ve dünyadaki örneklerinden bahsettik. Şimdi projemizin temel tasarım amaçlarını ve hangi ihtiyaçları gidereceğinden bahsedelim.

1- Sistem sensörler aracılığıyla çevreden sürekli veri alacaktır. Gelen bilgilerin ne olduğunu belirlemek ve bunlara göre işlemleri yapmak için sensör tanımları oluşturacağız. Buna kısaca; sensors diyeceğiz. (1) Bu varlık için niteliklerimiz; sensorId, sensorType, sensorName

2- Sistem sensörler aracılığıyla çevreden sürekli veri alacaktır. Ancak bazı durumlarda sensörlerden gelen verilere göre bazı işlemlerin yapılmasını isteyebiliriz. Örneğin; sıcaklık belirli bir derecenin üstüne çıktığında klimayı otomatik olarak çalıştırmak veya serada nem oranı düştüğünde kullanıcıya bildirim göndermek gibi. Bu gibi işlemleri yapmak için actuator’lere ihtiyacımız var. Actuator’ler IoT ekosisteminde bulunan bazı donanımları çalıştırmayı sağlar. Buna kısaca; actuators diyeceğiz. (2) Bu varlık için niteliklerimiz; actuatorId, actuatorType, actuatorName

3- IoT uygulamalarında veriler Gateway denilen cihazlar ile buluta yani sistemin veri işleme merkezine gönderilir. Ortamda bulunan sensörler Gateway cihazlara doğrudan bağlanabilir. Ancak bazı durumlarda tek bir IoT uygulaması amacımızı karşılayabilir. Bu gibi durumlarda sensörleri doğrudan Gateway cihaza bağlayabiliriz. Eğer birden çok (örneğin 4 tane) IoT ekosistemi oluşturacaksanız, bu durumda her ekosistem için Gateway temini maaliyetleri arttıracaktır. Masrafları azaltmak adına bir ara katmana daha ihtiyacımız var. Bu ara katmana Node diyeceğiz. Node, konum olarak sensör ve Gateway arasında yer alan ve Gateway cihazlara kıyasla daha ucuz olan cihazları tanımlamak için kullanılacaktır. Örneğin; sensörleri, NodeMCU kablosuz aygıtı üzerinden Gateway cihazlara bağlayabiliriz. Buradaki varlığımız node_list olsun.  (3) Bu varlığın nitelikleri; nodeId ve nodeName

4- IoT tabanlı uygulamalarda işlemler; Gateway ve Server üzerinde yapılır. Gateway, IoT uygulamasının iş sahası dediğimiz alanında bulunan, veri işlemeyi yerelde yapıp daha hızlı tepki veren Raspberry Pi, Arduino, Intel Edison, Android ve İoS mobil cihazlarını temsil etmektedir. Server ise bulut tabanlı sistemin ana merkezi olan, sistem genelinde veri bütünlüğünü sağlayan ancak eşzamanlı tepkisel işlemlerde pekte önerilmeyen server veya server ailesini temsil eder.  Amacımız gateway tanımlama ve veri işleme merkezinin nerede yapılacağını belirlemektir. Buradaki varlıklar; gateways  ve data_processing_center.(4) (5) . Her iki varlık için nitelikler şöyle; dataProcessingCenter (processingId,processingPlaceName),  gateways(gatewayId, gatewayName)

5- Kurumsal veya bireysel olsun IoT uygulamalarının kullanılacağı yerleri tanımlamak oldukça önemlidir. Burada IoT uygulamasının ofis, ev, çalışma odası, fabrika gibi alanlarını belirleyeceğiz. Buna kısaca; area diyeceğiz. (6) Area ile ilgili nitelikler; areaIdenvironmentName ve  areaName

6- Sensörler ya Node ya da bir Gateway (genelde bu cihazlar ile) üzerinden ağa bağlanacak ve sensörlerden gelen anlık veriler Gateway üzerinden server’a aktarılacaktır. Amacımız sensör/Gateway/Node/Ortam tanımlamalarının yapılmasıdır. Burada ki varlık; iot_app. (7) Bu varlığın temel nitelikler; iotAppId, iotAppName

7- IoT tabanlı bir sistemden gelen bilgiler özel veya genel olabilir. Bundan dolayı kullanıcı tanımlamaları ve kullanıcı yetkilerini belirlemek gerekiyor. Buna kısaca; users diyeceğiz. (8) Varlık için nitelikler şöyle; users: userId, authorityType ve userName

8- IoT uygulamalarında en büyük tehlike ve özellikle son kullanıcıları tehdit eden, şüphesiz güvenlik açıklarıdır. Bu güvenlik açıklarının büyük bir kısmı yazılımlardan kaynaklanmaktadır. Bunu önlemek için kullanılacak uygulamanın güvenlik sertifikasına sahip olması gerekiyor. Güvenlik sertifikasını sistem otomatik olarak imzaladıktan sonra kullanıcı uygulamayı kullanabilecektir. Bu aşamda temel ihtiyaçlarımız; yazılım ekleme ve sertifika yetkilendirmesidir. (9)  Varlık ; software. Bu varlığın nitelikleri sırasıyla şöyledir. softwares:  softwareId, certificate  ve  softwarePackageName

9- Burada users, area ve software bağlantılarını yapacağımız son bir varlığa ihtiyacımız var.  Bu varlık ile tanımladığımız tüm varlıkların beraber çalışması sağlanacak. (10) Buna all_iot_app diyeceğiz. Bu varlığın nitelikleri: id, iotAppId, userId, softwareId

IoT tabanlı bir sistemi yönetmek adına yukarıda sıraladığımız temel amaçları gerçekleştireceğiz. Projeye açıklık katmak adına aşağıdaki şemayıda ekledik.

Sonraki yazımızın başlığı “İhtiyaçlara Göre ER Modelinin Oluşturulması” olacaktır. Görüşmek üzere….