Bir MYSQL Sorum Ve Bir De Node.Js+MYSQL Sorum [Uzman]
-
Herkese çok teşekkür ederim. Başta @detCode ve @pSkpt olmak üzere. Node.js sorunum çözüldü. Şu şekilde açıklamalı olarak yazayım kodları:
//Önce render'a atacağımız sıradan değişkenleri bi belirtelim var tum_render = []; tum_render.title = "Turan"; tum_render.description = "Turan'ın websitesi"; //Daha sonra kullanacağımız sql sorgularını sorgular ayrı isimler ayrı olmak üzere belirtelim var rastgeleQuery = "SELECT baslik,hit FROM icerik ORDER BY RAND() LIMIT 1"; var son5Query = "SELECT baslik,hit FROM icerik LIMIT 5"; var query_arr = [rastgeleQuery, son5Query]; var query_name = ['rastgele', 'son5']; //bilgileri tanımladık şimdi fonksiyonları yazalım onlar da şöyle: //veritabanı sorgusu yapacak fonksiyon function runQuery(query_arr,sira){ connection.query(query_arr[sira], function(err, rows, fields) { if (err) throw err; var obj = []; obj[query_name[sira]] = rows; sonuclar.push(obj); if (query_arr.length <= sira+1){ sonuc(); }else{ runQuery(query_arr, sira+1); } }); } //iki veya daha fazla objecti birleştiren fonksiyon kaynak: http://stackoverflow.com/questions/2454295/javascript-concatenate-properties-from-multiple-objects-associative-array function collect() { var ret = {}; var len = arguments.length; for (var i=0; i<len; i++) { for (p in arguments[i]) { if (arguments[i].hasOwnProperty(p)) { ret[p] = arguments[i][p]; } } } return ret; } //runQuery sonuçlandığında çalıştırılacak fonksiyon bi nevi callback function sonuc(){ for(var x = 0; x<=sonuclar.length-1; x++){ tum_render = collect(tum_render,sonuclar[x]); } console.log(tum_render); res.render('index', tum_render); } //Tüm bu kodlar [router.get('/' ....] içerisinde denendi. Node.js + Express Jade ve Mysql2 kütüphaneleri kullanıldı.
-
Daft bunu yazdı
merak ettim neden nodejs
Hocam muhtemelen tuzak soru "Zaten node.js'in anlamı asenkron uygulama callbacklerle haşır neşir olman gerek yoksa ne için kullanıyorsun" gibi derin bir anlam çıkarttım ben :)
İşin açığı şöyle herkes gibi ben de "vaay demek non-time uygulama ha" diye node.js'e merak saldım ancak daha sonrası öyle gelişmedi. Konsola birkaç bişey yazıp eklenti yüklemek hazır yazılan biçok eklentinin devam edip etmediğine göre hareket etmek ve hemen her şey için (gerek c/c++ gibi native diller gerekse javascript ile olsun) eklentiler yazıldığını görünce hoşuma gitti. Ayrıca sadece web için değil çok güzel konsol uygulamaları veya mobile için native web uygulamaları yazılabiliyordu araştırdığım kadarıyla. Özellikle C/C++ ile eklenti yazmak en harika kısmı. Bir de hız olarak ben iddia ediyorum PHP ile yazdığın bir uygulamayı Node.js ile daha performanslı yazarsın. Benchmarkını felan bilemem işin açığı aynı kişi Node.js ile daha güzel web uygulamaları yazabilir benim görüşüm.
Bir de tabi DigitalOcean gibi bir nimette 100$ promosyon kodum olunca tabi node kullanmak daha cazip geldi :D Tüm bunlar PHP'de de olabilir yoktur demiyorum ama host kavramıyla PHP'yi tanıdığım için Phalcon'u aldığım hostingciye yüklettirmeden kullanamadım belki kendi serverımda sürekli PHP kullansaydım iş daha başka boyutlara varabilirdi.
Yani kısaca asenkron olması veya çok büyük web sitelerinin sorunları için kullanılması benim kullanma sebebim değil hocam. Eğer meraktan soruyorsan işin ehli biçok kişi avantajlarını sunumlar halinde yazmış incelemeni tavsiye ederim; eğer tuzaksa da cevabım bu şekilde :)
shock56 bunu yazdıBen node.js veritabanı sorguları için knex.js kütüphanesini kullamıyorum. İstersen bu kütüphaneye bir göz at
Hocam MYSQL'e zaten alışkınız az çok knex'in tek avantajı bana sanırsam sql parametresini fonksiyonel olarak yazdırmak olur ona da gerek yok. Tam inceleme fırsatı bulamadım da ilk izlenimim bu oldu. Sağolasın
pesimistzombie bunu yazdırandom veri için 1 ve toplam kayıt arasında random sayı oluştur limit ile kullanarak veriyi nokta atışıyla çek.
neden limit? id= şeklinde kullanırsan oluşturduğun sayı karşılığında id gelmezse karşına hata verecek o nedenle.
Hocam öncelikle sağolasın: 6500 veri var hocam şuanlık çok da birşey değil ama ilerde daha da artacaktır. İngilizce kaynaklardan anladığım kadarıyla (ingilizce bilmiyorum) LIMIT 1243,1 gibi bir sorguda 1243 tanesini tek tek geçtikten sonra veriyi alıyormuş (heralde böyleydi sebep :D) yani onun da hantal olduğunu söylemişler. Şöyle bi algoritma arıyorum (bu ilk postta belirttiğim gibi sıkıntılı çalışıyor ama çok hızlı)
SELECT name FROM random AS r1 JOIN (SELECT (RAND() * (SELECT MAX(id) FROM random)) AS id) AS r2 WHERE r1.id >= r2.id ORDER BY r1.id ASC LIMIT 1;
ozgunlu bunu yazdıHocam öncelikle, Nodejs tek thread üzerinde çalışıyor. Callback fonksiyonlarını kullanman gerekiyor her seferinde. (Uzun cycle' lar alan işlemlerde (bkz. veritabanı işlemleri)
Veritabanı işlemleri için https://www.npmjs.com/ hazır CRUD işlemleri yapan, package' lar bulabilirsin.
En basitinden, while döngüsünü bile callback' siz yazarsan sıçtın demektir :)
Aynen haklıymışsın hocam ben bodoslama "js ok jquery ok php ve asp ok html ve css de ok" tamam ya node.js'e başlayak diye başladığım için asenkronun kelime anlamını başıma gelene kadar öğrenmediğim için sıkıntı yaşadım. Sağolasın
-
tuzak değildi sadece merak ettim
-
Daft bunu yazdı
tuzak değildi sadece merak ettim
Pardon ozaman hocam :) Söylediklerim geçerli o konuda pek çok sebebi var
mysql sql node.js performance optimization performans optimizasyonu