.sqlite dosyası ME proje yapısına dahil edilebilir mi? .ex5'te sonraki paketleme için
Eğer öyleyse, .sqlite dosyasının boyutu büyüdüğünde .ex5 programı nasıl davranacak? önceden derlenmiş bir .ex5 programında
Yeni işlevsellik için teşekkürler.
Yeni bir işlevsellik hakkında iyi bir referansın, geliştirmedeki başarının anahtarı olduğunu düşünüyorum. Yardımın kendisinde nasıl çalışılacağına dair yeterli örnek yok.
Ayrıca, bulmayı başardığımız aşağıdaki eksikliklere dikkat etmenizi rica ediyorum:
1) DatabaseExecute işlevinin açıklaması doğru değil, DatabasePrepare'den kopyalandı.
2) DatabaseRead işlevinin ilk parametresinin eksik açıklaması: int database , // DatabaseOpen'da alınan veritabanı tanıtıcısı;
DatabasePrepare daha eksiksiz bilgi sağladığından: c daha sonra DatabaseRead() ile yürütülebilecek bir istek tanıtıcısı oluşturur .
3) DatabaseTransactionXXX işlevleri yukarıdaki GetLastError() hata listelerini gerçekten oluşturuyor mu, yoksa "önceki bir hatadan kaynaklanan takip hatası" mı yapıyorlar?
4) DatabaseTransactionХХХ işlevleri için iç içe işlemlerle çalışma hakkında hiçbir bilgi sağlanmaz.
5) DatabaseColumnName işlev parametresinin açıklamasında bir yazım hatası ("alan adını almak için" olmalıdır)
string& name // tablo adını almak için değişken referansı
Harika yeni tanıtım Renat! Böyle bir soru vardı.
.sqlite dosyası ME proje yapısına dahil edilebilir mi? .ex5'te sonraki paketleme için
Eğer öyleyse, .sqlite dosyasının boyutu büyüdüğünde .ex5 programı nasıl davranacak? önceden derlenmiş bir .ex5 programında
Büyük olasılıkla, kaynaklara dahil edilmesine izin vereceğiz ve bu dosyalar program ilk başlatıldığında otomatik olarak diske ayıklanacak.
Yani ex5'in içinde taban şişmesi olmayacak. Dosya yalnızca disk üzerinde değiştirilebilir.
Veritabanları hem diskte hem de yalnızca DATABASE_OPEN_MEMORY bayrağı kullanılarak bellekte tutulabilir.
Bunun MT5 Terminalleri arasında (SSD dosyalarını öldürmek yerine) ve Terminal içindeki programlar arasında (kaynaklar yerine) veri alışverişi için resmi mekanizma olduğunu doğru anlıyor muyum?
Yeni işlevsellik için teşekkürler.
Yeni bir işlevsellik hakkında iyi bir referansın, geliştirmedeki başarının anahtarı olduğunu düşünüyorum. Yardımın kendisinde nasıl çalışılacağına dair yeterli örnek yok.
Ayrıca, bulmayı başardığımız aşağıdaki eksikliklere dikkat etmenizi rica ediyorum:
1) DatabaseExecute işlevinin açıklaması doğru değil, DatabasePrepare'den kopyalandı.
2) DatabaseRead işlevinin ilk parametresinin eksik açıklaması: int database , // DatabaseOpen'da alınan veritabanı tanıtıcısı;
DatabasePrepare daha eksiksiz bilgi sağladığından: c daha sonra DatabaseRead() ile yürütülebilecek bir istek tanıtıcısı oluşturur .
3) DatabaseTransactionXXX işlevleri yukarıdaki GetLastError() hata listelerini gerçekten oluşturuyor mu, yoksa "önceki bir hatadan kaynaklanan takip hatası" mı yapıyorlar?
4) DatabaseTransactionХХХ işlevleri için iç içe işlemlerle çalışma hakkında hiçbir bilgi sağlanmaz.
5) DatabaseColumnName işlev parametresinin açıklamasında bir yazım hatası ("alan adını almak için" olmalıdır)
string& name // tablo adını almak için değişken referansı
Yardım kısmen güncellendi, lütfen tekrar kontrol edin. Bu, yardımın ilk versiyonudur ve tamamlanacaktır.
SQLite'da iç içe geçmiş işlemler yoktur, bu yüzden onları yapmaya çalışmayın.
Konuda örnekler sunulmuştur, karmaşık bir şey yoktur. Daha sonra standart kütüphanede bir makale ve bir sarmalayıcı sınıfı yapacağız.
Bunun MT5 Terminalleri arasında (SSD dosyalarını öldürmek yerine) ve Terminal içindeki programlar arasında (kaynaklar yerine) veri alışverişi için resmi mekanizma olduğunu doğru anlıyor muyum?
Dağıtmak için dar görüşlü kullanıcılardan "SSD'yi öldürmek" hakkında yeterince açık saçmalık.
Hayır, bunlar dosya tabanlarıdır - değiştirilebilirler, ancak veritabanları aynı anda açıkken potansiyel olarak özel erişim nedeniyle bunlara farklı Uzman Danışmanlardan aynı anda erişmek risklidir.
"Yalnızca DATABASE_OPEN_MEMORY bayrağı tarafından bellekte" açılan veritabanları yalnızca belirli bir program tarafından kullanılabilir ve kimseyle paylaşılmaz.
Veritabanlarının uygulama alanları:
- MQL5 programlarının ayarlarının ve durumlarının saklanması
- Büyük veri depolama
- Tarafta hazırlanan verilerin kullanımı
Örneğin, Metatrader'dan SQLite'a veri aktardık, bu verileri Python'da hazır matematiksel paketler kullanarak hesapladık ve sonucu SQlite formatına da koyduk.
ME'deki veritabanı editörü, çok uygun olacak, teşekkürler.
Hayır, bunlar dosya tabanlarıdır - değiştirilebilirler, ancak veritabanları aynı anda açıkken potansiyel olarak özel erişim nedeniyle bunlara farklı Uzman Danışmanlardan aynı anda erişmek risklidir.
Python, çok iş parçacıklı bir veritabanıyla çalışırken iş parçacığı güvenli G/Ç için Sqlite3Worker kitaplığına sahiptir.
Birkaç uzmandan oluşan bir veritabanıyla eşzamansız olarak çalışabilmek için uygulamayı mql'ye taşımayı düşünmek mantıklı olabilir.
Peki, ya da fikri ödünç alın ve kendi asenkron giriş/çıkışınızı uygulayın.
Python, çok iş parçacıklı bir veritabanıyla çalışırken iş parçacığı güvenli G/Ç için Sqlite3Worker kitaplığına sahiptir.
Birkaç uzmandan oluşan bir veritabanıyla eşzamansız olarak çalışabilmek için uygulamayı mql'ye taşımayı düşünmek mantıklı olabilir.
Peki, ya da fikri ödünç alın ve kendi asenkron giriş/çıkışınızı uygulayın.
Yukarıdaki performans tablosunu gördünüz mü? Orada, MQL5'te genellikle C++'dan daha hızlı çalışır.
Elbette her şeye sahibiz, çok iş parçacıklı ve her şey doğru.
Tamamen farklı bir şey hakkında - farklı programlar / işlemler bağımsız olarak aynı veritabanı dosyasına tırmanırsa ne olur. Bir program (MQL5) değil, birbirini bilmeyen ve aynı veritabanı tanıtıcısını kullanmayan birkaç bağımsız program.
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
2265 derlemesinde, SQLite 3.30.1'e dayalı düzenli veritabanı işlevleri uyguladık:
Mümkün olduğunca performansa odaklandığımız için, LLVM 9.0.0 ve MQL5 testlerinin sonuçları burada. Milisaniye cinsinden süre ne kadar düşükse o kadar iyidir:Veritabanları hem diskte hem de yalnızca DATABASE_OPEN_MEMORY bayrağı kullanılarak bellekte tutulabilir. Bir DatabaseTransactionBegin/Commit/Rollback işleminde büyük eklemeleri/değişiklikleri sarmak, işlemleri yüzlerce kez hızlandırır.
MQL5'teki hız, en iyi derleyicilerden birine sahip yerel C++ ile kesinlikle aynıdır. Oynatma kıyaslama paketi ekli.
Ayrıca, toplu işlemleri basitleştiren ve hızlandıran kayıtları doğrudan bir yapıya okumanıza olanak tanıyan benzersiz bir DatabaseReadBind işlevi uyguladık.
İşte basit bir örnek: