<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Πρώτα Βήματα - Βάσεις δεδομένων</title><link>https://www.dotnetzone.gr:443/cs/forums/73/ShowForum.aspx</link><description>Για όσους κάνουν τα πρώτα τους βήματα στην Microsoft Access ή τον SQL Server, ή γενικότερα στη θεωρία βάσεων δεδομένων.</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: sql cursors ή arraylist?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/62371.aspx</link><pubDate>Sun, 16 Jan 2011 03:15:34 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:62371</guid><dc:creator>bagosm</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/62371.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=62371</wfw:commentRss><description>Ερώτηση: Τα αποτελέσματα θέλεις απλά να είναι υπολογισμένα βάση του 
αρχικού τραπεζιού, ή θέλεις να κάνεις τροποποίηση πάνω στα αποτελέσματα;&lt;br&gt;&lt;br&gt;Εαν δεν σε ενδιαφέρει η τροποποίηση πάνω στα αποτελέσματα, η καλύτερη λύση είναι τα &lt;a href="http://msdn.microsoft.com/en-us/library/dd171921%28v=sql.100%29.aspx"&gt;Views&lt;/a&gt;&lt;br&gt;&lt;br&gt;Όλο τον υπολογισμό τον αναλαμβάνει η SQL, οπότε μπορείς να την εχει σε cluster η σε ο,τι θέλεις. Κάθε φορά που θα κάνεις μια νεα εγγραφή η SQL θα αναλαμβάνει να κανει update το "virtual" τραπέζι View. Τα δεδομένα αποθηκεύονται σαν να ηταν κανονικό τραπέζι και μπορείς να κάνεις query πάνω σε αυτά.&lt;br&gt;&lt;br&gt;Και φυσικά μπορείς να έχεις παραπάνω απο 1 view, ανάλογα με τους υπολογισμούς που θέλεις να κάνεις.&lt;br&gt;&lt;br&gt;&lt;b&gt;edit:&lt;/b&gt; Απο performance μην το φοβάσαι, προσωπικά τρέχω σε cloud 8 επεξεργαστές sql, με ~1,5-2M εγγραφές το μήνα, και πολλαπλά indexed views, τα οποία όμως αποτελούνται μόνο απο joins και προσθέσεις (SUM() ) χωρίς κανένα απολύτως πρόβλημα&lt;br&gt;</description></item><item><title>Απ: sql cursors ή arraylist?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/62253.aspx</link><pubDate>Tue, 11 Jan 2011 17:57:29 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:62253</guid><dc:creator>Ευθύμης Δημόπουλος</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/62253.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=62253</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Markos:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Η προσέγγιση του trial and error είναι κακή στη δική σου περίπτωση εξαιτίας του μεγάλου όγκου των δεδομένων. Αν επρόκειτο για desktop εφαρμογή τρόπος αυτός θα ήταν υπό προϋπόθεση αποδεκτός, μιας και ένα άτομο μπορεί να περιμένει, να τροποποιεί τους περιορισμούς του προβλήματος και να ξαναδοκιμάζει. Ακόμα, όμως, και σ' αυτή την περίπτωση λείπει κάτι ουσιαστικό το οποίο λέγεται ανάλυση ευαισθησίας. Δεν είναι δυνατόν κάποιος να δοκιμάζει επ' άπειρον τις τιμές των ορίων των περιορισμών, μήπως και του "κάτσει" κάποια λύση. Σε περίπτωση που το πρόβλημα δεν λύνεται, πρέπει να παρέχεται η πληροφόρηση ως προς το ποια παράμετρος ευθύνεται και κατά πόσο πρέπει να τροποποιηθεί για να πάρει λύση.&lt;br&gt;&lt;br&gt;Η προσέγγισή σου πρέπει ν' αλλάξει οπτική γωνία, ειδικά τώρα που πρόκειται για web εφαρμογή. Αντί ν' ασχολείσαι με τα points, ασχολήσου με τους περιορισμούς. Συνεργάσου με έναν μαθηματικό, έτσι ώστε να διατυπώσετε μια αναλυτική μεθοδολογία που θα σου φράσσει τα όρια της λύσης και μετά κάνε αναζήτηση ως προς εκείνα τα σημεία που πέφτουν "μέσα". Exhaustive search και υπολογισμός όλων των ενδιάμεσων αποτελεσμάτων είναι εγγύηση για αποτυχία. &lt;br&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;χμμ&amp;nbsp; σε αυτό που καταλήγω τελικά(?) είναι να περιορίσω το αρχικό δείγμα μου, μιας και τα παραγομένα αποτελέσματα θα αγγίζουν αστρονομικά νούμερα...&lt;br&gt;&lt;br&gt;Αλήθεια γνωρίζει κανείς, σε τεχνικές data mining και σε αλγόριθμους για clustering όπως π.χ. η K-means, πόσα data είναι απαιτητό να "φορτώνονται";&lt;br&gt;Δηλαδή για ένα real world case study με πόσα data δουλεύει ο αλγόριθμος; (Μιλάω εμπειρικά πάντα..., ξέρω ότι μπορεί να υπάρχουν περιπτώσεις με 100 παρατηρήσεις και άλλα cases με 1Μ )&lt;br&gt;</description></item><item><title>Απ: sql cursors ή arraylist?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/62127.aspx</link><pubDate>Wed, 05 Jan 2011 23:42:55 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:62127</guid><dc:creator>dimos.homatas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/62127.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=62127</wfw:commentRss><description>Δεν ξέρω εάν το πρόβλημα έχει αλγεβρική λύση, αλλά σε περίπτωση &amp;nbsp;μπορούσες να κάνεις κάτι σε desktop χρησιμοποιώντας multi threading.&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Αν σε προβληματίζει ο όγκος των υπολογισμών, τότε είναι μία πιο γρήγορη προσέγγιση, σπάστο στους πυρήνες που (ίσως) έχεις. Και αν θες να το πάμε και πιο πέρα, μοιράζεις το πρόβλημα και σε άλλες CPU.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Αν το πρόβλημα είναι το I/O, και εκεί μπορούν να γίνουν κάποιες βελτιστοποιήσεις, αν και λιγότερο εμφανείς: ομαδικό διάβασμα εγγραφών, μινιμαλιστικές δομές δεδομένων κλπ.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Την ποσότητα της μνήμης που απαιτείται μπορείς μέσες άκρες να την υπολογίσεις.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Επαναλαμβάνω όμως, εάν υπάρχει αλγεβρικός τρόπος, τότε τα παραπάνω δεν έχουν νόημα!&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Χώρια που απαιτείται και μία ελαφριά δουλίτσα :)&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Δήμος&lt;/div&gt;</description></item><item><title>Απ: sql cursors ή arraylist?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/62126.aspx</link><pubDate>Wed, 05 Jan 2011 23:25:59 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:62126</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/62126.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=62126</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Ευθύμης Δημόπουλος:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;p&gt;....και αν το count Χ των CalcAttrA, CalcAttrB,CalcAttrC που CalcAttrA&amp;gt;Τ2 κ.λπ. είναι μικρότερος του T3&lt;br&gt;&lt;/p&gt;Αν δεν ικανοποιούν τα αποτελέσματα τον χρήστη τότε εκείνος αλλάζει τις τιμές στα thresholds T1,T2,T3 και επαναλαμβάνει...&lt;br&gt;&lt;br&gt;(δεν ήθελα να σας μπλέξω... αλλά... )&lt;br&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;br&gt;&lt;br&gt;Κάτι που μπορεί να φανεί χρήσιμο είναι το γεγονός ότι το πλήθος των διαφορών (π.χ. CalcAttrA) πρέπει να είναι μικρότερο από ένα όριο, το Τ3. Αυτό σημαίνει ότι αν οι διαφορές είναι ν, το max πλήθος των σημείων είναι ν+1. Άρα θες ν+1&amp;lt;Τ3. Αυτό φωνάζει για χρήση &lt;a href="http://en.wikipedia.org/wiki/Genetic_algorithm"&gt;γενετικών αλγορίθμων&lt;/a&gt;. Δημιουργείς έναν αρχικό πληθυσμό "χρωμοσωμάτων", όπου κάθε ένα τους θα περιέχει &lt;b&gt;το πολύ&lt;/b&gt; ν+1 σημεία. Η επιλογή των σημείων θα γίνει με τρόπο τυχαίο. Μέσω διαδικασιών, "crossover", "mutation" και επιλογής, και με χρήση μιας συνάρτησης fitness που εσύ θα ορίσεις, θα δημιουργείς νέους πληθυσμούς όπου ο κάθε ένας θα προκύπτει από τον προηγούμενο. Η συνάρτηση fitness θα πρέπει να είναι κάποια "συνισταμένη" συνάρτηση των υπολοίπων περιορισμών που θέλεις να ικανοποιούνται. Όσο βελτιώνεται η τιμή της συνάρτησης fitness, τόσο πιο κοντά βρίσκεσαι στη λύση. Ύστερα από κάποιο πλήθος γενεών, επιλέγεις το χρωμόσωμα με την καλύτερη προσαρμογή και το παρουσιάζεις σαν λύση. Βέβαια, οι γενετικοί αλγόριθμοι δεν εξασφαλίζουν ούτε ότι θα ικανοποιούνται όλοι οι αρχικοί περιορισμοί, αλλά ούτε και ότι η λύση είναι η βέλτιστη. Επίσης, η επιτυχημένη εφαρμογή τους προϋποθέτει R&amp;amp;D, έτσι ώστε να εξασφαλιστεί ότι "δουλεύουν" με το συγκεκριμένο πρόβλημα. Είναι χρονοβόροι, αλλά μπροστά στο δικό σου exhaustive search... Όλ' αυτά βέβαια, αν το πρόβλημα δεν μπορεί να αντιμετωπιστεί με αναλυτικές μεθόδους. Just a thought...&lt;br&gt;</description></item><item><title>Απ: sql cursors ή arraylist?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/62125.aspx</link><pubDate>Wed, 05 Jan 2011 21:14:25 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:62125</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/62125.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=62125</wfw:commentRss><description>Η προσέγγιση του trial and error είναι κακή στη δική σου περίπτωση εξαιτίας του μεγάλου όγκου των δεδομένων. Αν επρόκειτο για desktop εφαρμογή τρόπος αυτός θα ήταν υπό προϋπόθεση αποδεκτός, μιας και ένα άτομο μπορεί να περιμένει, να τροποποιεί τους περιορισμούς του προβλήματος και να ξαναδοκιμάζει. Ακόμα, όμως, και σ' αυτή την περίπτωση λείπει κάτι ουσιαστικό το οποίο λέγεται ανάλυση ευαισθησίας. Δεν είναι δυνατόν κάποιος να δοκιμάζει επ' άπειρον τις τιμές των ορίων των περιορισμών, μήπως και του "κάτσει" κάποια λύση. Σε περίπτωση που το πρόβλημα δεν λύνεται, πρέπει να παρέχεται η πληροφόρηση ως προς το ποια παράμετρος ευθύνεται και κατά πόσο πρέπει να τροποποιηθεί για να πάρει λύση.&lt;br&gt;&lt;br&gt;Η προσέγγισή σου πρέπει ν' αλλάξει οπτική γωνία, ειδικά τώρα που πρόκειται για web εφαρμογή. Αντί ν' ασχολείσαι με τα points, ασχολήσου με τους περιορισμούς. Συνεργάσου με έναν μαθηματικό, έτσι ώστε να διατυπώσετε μια αναλυτική μεθοδολογία που θα σου φράσσει τα όρια της λύσης και μετά κάνε αναζήτηση ως προς εκείνα τα σημεία που πέφτουν "μέσα". Exhaustive search και υπολογισμός όλων των ενδιάμεσων αποτελεσμάτων είναι εγγύηση για αποτυχία. &lt;br&gt;</description></item><item><title>Απ: sql cursors ή arraylist?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/62123.aspx</link><pubDate>Wed, 05 Jan 2011 16:42:25 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:62123</guid><dc:creator>Antonios Chatzipavlis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/62123.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=62123</wfw:commentRss><description>&lt;P&gt;Θα κάνω εγω το συνήγορο του γνωστού Δ...&lt;/P&gt;
&lt;P&gt;Πιστεύει κανείς ότι θα φέρει ή θα δημιουργήσει έτσι εύκολα και με καλύτερο response 50.000.000 εγγραφές (και μιλάω για το μικρό δείγμα των 10.000 αρχικών εγγραφών)&amp;nbsp;στον client ή θα τα έχει cached εκεί???&lt;/P&gt;</description></item><item><title>Απ: sql cursors ή arraylist?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/62110.aspx</link><pubDate>Wed, 05 Jan 2011 09:01:27 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:62110</guid><dc:creator>Ευθύμης Δημόπουλος</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/62110.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=62110</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;KelMan:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;Μήπως θα υπάρχει εφαρμογή που θα μπορεί να βοηθήσει την κατάσταση; Πχ να κάνει η εφαρμογή τους υπολογισμούς και να cachάρει τα data;&lt;/p&gt;&lt;p&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/p&gt;&lt;p&gt;Θα υπάρχει εφαρμογή σε web forms με vb (έτσι ορίζουν τα specifications) γι' αυτο στην αρχή ανέφερα τα arraylists και τη λύση του programming με loops&lt;/p&gt;&lt;p&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;&lt;a&gt;Ευθύμης Δημόπουλος&lt;/a&gt;:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;/p&gt;&lt;p&gt;στο μυαλό μου φέρνω έναν τρόπο να γίνει με φόρτωμα του πίνακα σε 
arraylist και με programming-loops να γίνουν οι υπολογισμοί που θα 
αποθηκεύονται σε ένα νέο arraylist και στη συνέχεια&lt;br&gt;θα το αποθηκεύω σε sql table&lt;br&gt;&lt;u&gt;&lt;b&gt;όμως ανησυχώ :&lt;/b&gt;&lt;/u&gt;&lt;br&gt;-για τα resources που θα καταναλώνονται από άποψη μνήμης (μεγάλος όγκος δεδομένων)&lt;br&gt;-για την ταχύτητα&lt;br&gt;-για την ορθότητα του εγχειρήματος από άποψη ποιότητας κώδικα&lt;br&gt;&lt;br&gt;κάποιος
 φίλος με παρέπεμψε να δω και τα cursors στον sql server, με τα οποία 
όμως δεν έχω ξανα-ασχοληθεί και δεν τα κατέχω (και μετά από googling) 
δεν έχω κάποια σαφή εικόνα στο μυαλό μου...&lt;/p&gt;&lt;p&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/p&gt;&lt;p&gt;αλλά πιάσαμε να μιλάμε για sql solution οπότε θεώρησα αυτή σαν βέλτιστη λύση...&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;b&gt;Ερώτηση:&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Θεωρείς πως θα έχω καλύτερα αποτελέσματα όσον αφορά resources και ταχύτητα &lt;br&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;αν φορτώσω τα data του αρχικού πίνακα σε κάποιο array&lt;br&gt;&lt;/li&gt;&lt;li&gt;να κάνω τους υπολογισμούς μου με loops &lt;br&gt;&lt;/li&gt;&lt;li&gt;στη συνέχεια να τα αποθηκεύσω στη μορφή του Β πίνακα&lt;/li&gt;&lt;li&gt;και εν συνεχεία να τα φιλτράρω με βάση τη προτίμηση του χρήστη &lt;br&gt;&lt;/li&gt;&lt;li&gt;αποθηκεύοντας ή παρουσιάζοντας το τελικό αποτέλεσμα;&lt;br&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;Κατά προτίμηση θα ήθελα -βελτιστοποιώντας την απόδοση της εφαρμογής να 
μοιράσω όσο δυνατόν τις λειτουργίες ώστε να μην επιβαρύνω πολύ το 
σύστημα&lt;/p&gt;&lt;p&gt;(ούτε να γονατίσω τον sql server, ούτε να ξεχειλώσω τη μνήμη και τη cpu)&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;</description></item><item><title>Απ: sql cursors ή arraylist?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/62102.aspx</link><pubDate>Wed, 05 Jan 2011 04:24:52 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:62102</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/62102.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=62102</wfw:commentRss><description>&lt;P&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Ευθύμης Δημόπουλος:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;BR&gt;&lt;BR&gt;Απ'οτι κατάλαβα και νομίζω &lt;B&gt;μου το επιβεβαιώνεται κι εσεις (?)&lt;/B&gt;&amp;nbsp; (και σύμφωνα και με δικές μου δοκιμές) είναι προτιμότερο να τρέχω on the fly ερώτημα το οποίο να υπολογίζει και να φιλτράρει ταυτόχρονα&lt;BR&gt;απ' ότι αυτό που είχα αρχικά κατα νου: να κάνω τους υπολογισμούς, να τους αποθηκεύω και στη συνέχεια να τρέχω ερωτήματα τα οποία θα λαμβάνουν υπόψη τους τα thresholds και θα φιλτράρουν&lt;/P&gt;
&lt;P&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Πάντα εξαρτάται από τι ακριβώς θες να κάνεις και γι αυτό σου είπαμε να εξηγήσεις την μεγαλύτερη εικόνα. &lt;STRONG&gt;Σε γενικές γραμμές&lt;/STRONG&gt; η λύση του on-the-fly υπολογισμού και φιλτραρίσματος θα έχει μεγάλο κόστος σε CPU και μικρό σε I/O σε σχέση με τη λύση που έχεις κατά νου όπου συμβαίνει το ανάποδο. Το θέμα είναι όμως πόσους χρήστες θα έχεις που θα δουλεύουν ταυτόχρονα. Άν έχεις πολλούς που τρέχουν ταυτόχρονα τα queries της πρώτης λύσης μπορεί να έχεις θέμα με τα resources της CPU, αντίστοιχα με τη δεύτερη λύση θα έχεις θέμα με τα I/O resources. Από την άλλη, όλα θα γίνονται με queries; Μήπως θα υπάρχει εφαρμογή που θα μπορεί να βοηθήσει την κατάσταση; Πχ να κάνει η εφαρμογή τους υπολογισμούς και να cachάρει τα data; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ: sql cursors ή arraylist?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/62094.aspx</link><pubDate>Wed, 05 Jan 2011 01:56:53 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:62094</guid><dc:creator>Ευθύμης Δημόπουλος</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/62094.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=62094</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;spaceman:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Υποθετωντας οτι χρησιμοποιεις χωροταξικα δεδομενα, υπαρχει ενα ενδεχομενο να χρησιμοποιησεις spatial data types τα οποια θα μπορεσουν να απλοποιησουν την προσεγγιση σου.&lt;br&gt;Αν τα δεδομενα σου ειναι σε 3D τοτε μαλλον θα πρεπει να φτιαξεις την δικη σου custom λυση εως οτου μια μελλοντικη εκδοση του SQL SERVER να προσφερει πραγματικη υποστηριξη σε 3D spatial data (ή εναλλακτικα να χρησιμοποιησεις αλλο db server που υποστηριζει 3D)&lt;/p&gt;
&lt;p&gt;Σε ενα απο τα post αναφερεται:&lt;span style="background-color:transparent;font-family:Courier New;color:black;font-size:11px;font-weight:normal;"&gt;....&lt;span style="background-color:transparent;font-family:Courier New;color:fuchsia;font-size:11px;font-weight:normal;"&gt;ABS&lt;/span&gt;(y.a1-x.a1) CalcAttrA, &lt;span style="background-color:transparent;font-family:Courier New;color:fuchsia;font-size:11px;font-weight:normal;"&gt;ABS&lt;/span&gt;(y.a2-x.a2) CalcAttrB, &lt;span style="background-color:transparent;font-family:Courier New;color:fuchsia;font-size:11px;font-weight:normal;"&gt;ABS&lt;/span&gt;(y.a3-x.a3) CalcAttrC ....&lt;br&gt;&lt;/span&gt;οποτε υπαρχει η περιπτωση να "δουλευεις" με 3 διαφορετικα points in a 2D model.&lt;br&gt;Σε αυτην την περιπτωση μπορεις να ριξεις μια ματια στο παρακατω:&lt;br&gt;&lt;/p&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;br&gt;&lt;br&gt;spaceman συγνώμη αλλά κάπου σε έχασα...&lt;br&gt;&lt;br&gt;δεν αναφέρομαι σε χωροταξικά δεδομένα και κάπου μπερδεύτηκα... δεν μπορώ να κατανοήσω με μια πρόχειρη ματιά πως μπορώ να το ενσωματώσω στην εφαρμογή μου... θα το ξανακοιτάξω μόλις βρω λίγο χρόνο&lt;br&gt;σε ευχαριστώ για το post&lt;br&gt;</description></item><item><title>Απ: sql cursors ή arraylist?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/62093.aspx</link><pubDate>Wed, 05 Jan 2011 01:51:18 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:62093</guid><dc:creator>Ευθύμης Δημόπουλος</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/62093.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=62093</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Markos:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Μιας και γίνεται λόγος για Ευκλείδια απόσταση, αν τα x,y,z είναι σημεία σε τρισδιάστατο χώρο, απ' όσο θυμάμαι από την &lt;a href="http://en.wikipedia.org/wiki/Analytic_geometry"&gt;αναλυτική γεωμετρία&lt;/a&gt;, ο σωστός τύπος είναι:&lt;br&gt;&lt;br&gt;sqrt((x1-x2)^2+(y1-y2)^2+(z1-z2)^2)&lt;br&gt;&lt;br&gt;Στο συγκεκριμένο thread, δίνονται δύο διαφορετικοί τύποι. Ο ένας είναι το άθροισμα των τετραγώνων των διαφορών και ο άλλος είναι το άθροισμα των απολύτων τιμών των διαφορών.&lt;br&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Μάρκο έχεις δίκιο απλά δεν ήθελα να δώσω έμφαση στους τύπους υπολογισμού (για να μην κουράσω). Ουσιαστικά ο ολοκληρωμένος τύπος καθώς και ο αλγόριθμος που θα χρησιμοποιήσω στην εφαρμογή μου είναι αρκετά πιο πολύπλοκος και πιστεύω πως μόλις τον ολοκληρώσω θα είμαι σε θέση να τον δημοσιεύσω&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Απ'οτι κατάλαβα και νομίζω &lt;b&gt;μου το επιβεβαιώνεται κι εσεις (?)&lt;/b&gt;&amp;nbsp; (και σύμφωνα και με δικές μου δοκιμές) είναι προτιμότερο να τρέχω on the fly ερώτημα το οποίο να υπολογίζει και να φιλτράρει ταυτόχρονα&lt;br&gt;απ' ότι αυτό που είχα αρχικά κατα νου: να κάνω τους υπολογισμούς, να τους αποθηκεύω και στη συνέχεια να τρέχω ερωτήματα τα οποία θα λαμβάνουν υπόψη τους τα thresholds και θα φιλτράρουν&lt;br&gt;&lt;br&gt;από τις δοκιμές τις δικές μου έχω:&lt;br&gt;t1: 5000 rows&lt;br&gt;insert to t2: 12.497.500 rows -&amp;gt;10':15''&lt;br&gt;απλό select στο t2: 2':05''&lt;br&gt;&lt;br&gt;select query without insertion (t2): 2':17''&lt;br&gt;με το order by : 2'56''&lt;br&gt;&lt;br&gt;ΠΑΡΕΝΘΕΣΗ (σε τι μηχανήματα τα τρέχετε;;;;;;; πάω για αναβάθμιση... &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-3.gif" alt="Surprise" /&gt; )&lt;br&gt;</description></item><item><title>Απ: sql cursors ή arraylist?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/62092.aspx</link><pubDate>Wed, 05 Jan 2011 01:31:23 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:62092</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/62092.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=62092</wfw:commentRss><description>Μιας και γίνεται λόγος για Ευκλείδια απόσταση, αν τα x,y,z είναι σημεία σε τρισδιάστατο χώρο, απ' όσο θυμάμαι από την &lt;a href="http://en.wikipedia.org/wiki/Analytic_geometry"&gt;αναλυτική γεωμετρία&lt;/a&gt;, ο σωστός τύπος είναι:&lt;br&gt;&lt;br&gt;sqrt((x1-x2)^2+(y1-y2)^2+(z1-z2)^2)&lt;br&gt;&lt;br&gt;Στο συγκεκριμένο thread, δίνονται δύο διαφορετικοί τύποι. Ο ένας είναι το άθροισμα των τετραγώνων των διαφορών και ο άλλος είναι το άθροισμα των απολύτων τιμών των διαφορών.&lt;br&gt;</description></item><item><title>Απ: sql cursors ή arraylist?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/62091.aspx</link><pubDate>Wed, 05 Jan 2011 00:32:40 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:62091</guid><dc:creator>spaceman</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/62091.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=62091</wfw:commentRss><description>&lt;P&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Ευθύμης Δημόπουλος:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;BR&gt;&lt;BR&gt;Γενικότερα πρόκειται για έναν αλγόριθμο που υπολογίζει τις αποστάσεις μεταξύ των παρατηρήσεων χρησιμοποιώντας π.χ. την Ευκλίδεια απόσταση&lt;BR&gt;&lt;BR&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Υποθετωντας οτι χρησιμοποιεις χωροταξικα δεδομενα, υπαρχει ενα ενδεχομενο να χρησιμοποιησεις spatial data types τα οποια θα μπορεσουν να απλοποιησουν την προσεγγιση σου.&lt;BR&gt;Αν τα δεδομενα σου ειναι σε 3D τοτε μαλλον θα πρεπει να φτιαξεις την δικη σου custom λυση εως οτου μια μελλοντικη εκδοση του SQL SERVER να προσφερει πραγματικη υποστηριξη σε 3D spatial data (ή εναλλακτικα να χρησιμοποιησεις αλλο db server που υποστηριζει 3D)&lt;/P&gt;
&lt;P&gt;Σε ενα απο τα post αναφερεται:&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:black;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;....&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:fuchsia;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;ABS&lt;/SPAN&gt;(y.a1-x.a1) CalcAttrA, &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:fuchsia;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;ABS&lt;/SPAN&gt;(y.a2-x.a2) CalcAttrB, &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:fuchsia;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;ABS&lt;/SPAN&gt;(y.a3-x.a3) CalcAttrC ....&lt;BR&gt;&lt;/SPAN&gt;οποτε υπαρχει η περιπτωση να "δουλευεις" με 3 διαφορετικα points in a 2D model.&lt;BR&gt;Σε αυτην την περιπτωση μπορεις να ριξεις μια ματια στο παρακατω:&lt;BR&gt;&lt;/P&gt;&lt;PRE&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:black;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;CREATE&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;TABLE&lt;/SPAN&gt; dbo.mypoints(ID &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;INT&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;IDENTITY&lt;/SPAN&gt;(1,1) &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;PRIMARY&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;KEY&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;CLUSTERED&lt;/SPAN&gt;,
							point1 &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;FLOAT&lt;/SPAN&gt;,
							point2 &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;FLOAT&lt;/SPAN&gt;,
							point3 &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;FLOAT&lt;/SPAN&gt;,
							&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:teal;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;--spatial data&lt;/SPAN&gt;
							gpoint1 geometry,
							gpoint2 geometry,
							gpoint3 geometry,
							_3dpoint geometry)
							
&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;INSERT&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;INTO&lt;/SPAN&gt; dbo.mypoints(point1, point2, point3)
&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;VALUES&lt;/SPAN&gt; (8, 12, 6), (7, 23, 4), (15, 16, 17), (40, 1, 41)

&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:teal;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;--apply the geometry data&lt;/SPAN&gt;
&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;UPDATE&lt;/SPAN&gt; dbo.mypoints
&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;SET&lt;/SPAN&gt; gpoint1 = &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;'POINT('&lt;/SPAN&gt; + &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:fuchsia;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;CAST&lt;/SPAN&gt;(point1 &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;AS&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;VARCHAR&lt;/SPAN&gt;(50)) + &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;' 0)'&lt;/SPAN&gt;, &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:teal;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;--point on axis x&lt;/SPAN&gt;
	gpoint2 = &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;'POINT('&lt;/SPAN&gt; + &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:fuchsia;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;CAST&lt;/SPAN&gt;(point2 &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;AS&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;VARCHAR&lt;/SPAN&gt;(50)) + &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;' 0)'&lt;/SPAN&gt;, &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:teal;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;--point on axis x&lt;/SPAN&gt;
	gpoint3 = &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;'POINT('&lt;/SPAN&gt; + &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:fuchsia;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;CAST&lt;/SPAN&gt;(point3 &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;AS&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;VARCHAR&lt;/SPAN&gt;(50)) + &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;' 0)'&lt;/SPAN&gt;, &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:teal;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;--point on axis x&lt;/SPAN&gt;
&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:teal;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;--3 dimensional point, however z axis is only informational :-(&lt;/SPAN&gt;
_3dpoint = &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;'POINT('&lt;/SPAN&gt; + &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:fuchsia;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;CAST&lt;/SPAN&gt;(point1 &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;AS&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;VARCHAR&lt;/SPAN&gt;(50)) + &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;' '&lt;/SPAN&gt;+ &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:fuchsia;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;CAST&lt;/SPAN&gt;(point2 &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;AS&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;VARCHAR&lt;/SPAN&gt;(50)) + &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;' '&lt;/SPAN&gt;+ &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:fuchsia;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;CAST&lt;/SPAN&gt;(point31 &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;AS&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;VARCHAR&lt;/SPAN&gt;(50)) + &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;' )'&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:teal;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;--0 SRID assumed, by default&lt;/SPAN&gt;
	
	
	
&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:teal;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;-- create spatial indexes on x-axis points&lt;/SPAN&gt;
&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;CREATE&lt;/SPAN&gt; SPATIAL &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;INDEX&lt;/SPAN&gt; idx_gpoint1 &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;ON&lt;/SPAN&gt; dbo.mypoints(gpoint1) &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;WITH&lt;/SPAN&gt; (BOUNDING_BOX = ( 0, 0, 100, 1 )) &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:teal;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;--adjust box upper x,y limits to include the possible max upper values on each axis in 2D&lt;/SPAN&gt;
&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;CREATE&lt;/SPAN&gt; SPATIAL &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;INDEX&lt;/SPAN&gt; idx_gpoint2 &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;ON&lt;/SPAN&gt; dbo.mypoints(gpoint2) &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;WITH&lt;/SPAN&gt; (BOUNDING_BOX = ( 0, 0, 100, 1 ))
&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;CREATE&lt;/SPAN&gt; SPATIAL &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;INDEX&lt;/SPAN&gt; idx_gpoint3 &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;ON&lt;/SPAN&gt; dbo.mypoints(gpoint3) &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;WITH&lt;/SPAN&gt; (BOUNDING_BOX = ( 0, 0, 100, 1 ))


&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:teal;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;--get points on x axis that satisfy euclidean distance variables&lt;/SPAN&gt;
&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;DECLARE&lt;/SPAN&gt; @_1pointdistance &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;FLOAT&lt;/SPAN&gt;,
		@_2pointdistance &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;FLOAT&lt;/SPAN&gt;,
		@_3pointdistance &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;FLOAT&lt;/SPAN&gt;

&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;SELECT&lt;/SPAN&gt; @_1pointdistance = 8, 
	@_2pointdistance = 10, 
	@_3pointdistance = 5


&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:teal;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;--get points based on distance per pair&lt;/SPAN&gt;
&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;SELECT&lt;/SPAN&gt; a.id, b.id, 
		a.gpoint1.STAsText() &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;AS&lt;/SPAN&gt; a1_point, b.gpoint1.STAsText() &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;AS&lt;/SPAN&gt; b1_point, a.gpoint1.STDistance(b.gpoint1) &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;AS&lt;/SPAN&gt; firstpoint_distance, 
		a.gpoint2.STAsText() &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;AS&lt;/SPAN&gt; a2_point, b.gpoint2.STAsText() &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;AS&lt;/SPAN&gt; b2_point, a.gpoint2.STDistance(b.gpoint2) &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;AS&lt;/SPAN&gt; secondpoint_distance, 
		a.gpoint3.STAsText() &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;AS&lt;/SPAN&gt; a3_point, b.gpoint3.STAsText() &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;AS&lt;/SPAN&gt; b3_point, a.gpoint3.STDistance(b.gpoint3) &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;AS&lt;/SPAN&gt; thirdpoint_distance
&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;FROM&lt;/SPAN&gt; dbo.mypoints &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;AS&lt;/SPAN&gt; a
	&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:silver;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;JOIN&lt;/SPAN&gt; dbo.mypoints &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;AS&lt;/SPAN&gt; b &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;ON&lt;/SPAN&gt; a.ID &amp;lt; b.ID
&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;WHERE&lt;/SPAN&gt; a.gpoint1.STDistance(b.gpoint1) &amp;gt; @_1pointdistance &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:teal;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;--spatial indexes optimize STDistance() calculations&lt;/SPAN&gt;
  &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:silver;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;AND&lt;/SPAN&gt; a.gpoint2.STDistance(b.gpoint2) &amp;gt; @_2pointdistance
  &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:silver;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;AND&lt;/SPAN&gt; a.gpoint3.STDistance(b.gpoint3) &amp;gt; @_3pointdistance


&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:teal;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;--cleanup table&lt;/SPAN&gt;
&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;DROP&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;TABLE&lt;/SPAN&gt; dbo.mypoints	 &lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:black;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;&lt;FONT size=2 face=Tahoma&gt;--ΗΤΗ--&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/PRE&gt;</description></item><item><title>Απ: sql cursors ή arraylist?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/62090.aspx</link><pubDate>Wed, 05 Jan 2011 00:18:56 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:62090</guid><dc:creator>Antonios Chatzipavlis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/62090.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=62090</wfw:commentRss><description>&lt;P&gt;Οχι δε το λέω σαν παρατήρηση προς εσένα, προς Θεού. Απλά το είδα το δικό σου και αμέσως σκέφτηκα ότι και αυτό cross join θα κάνει το δοκίμασα και είπα να σου πω το αποτέλεσμα. &lt;/P&gt;
&lt;P&gt;Γεγονός πάντος είναι ότι δοκίμασα να βάλω στο άλλον πίνακα όλους τους δυνατούς συνδιασμούς των 10.000 εγγραφών που έχω στον αρχικό. Αυτό πήρε 9' 45'' και μπήκαν 49.995.000 εγγραφές.&lt;/P&gt;
&lt;P&gt;Προσπάθησα να κάνω select all στο ταπεινό μου virtual machine αλλά μάταια έτρωγα πόρτα από την μνήμη. Με τα φίλτρα όμως του φίλου μας τα πράγματα ήταν αρκετά κάλα αλλά όχι τραγικά διαφορετικά από πριν.&lt;/P&gt;
&lt;P&gt;Θα κάνω μερικές δοκιμές ακόμα που έχω στο μυαλό μου το βράδυ στο σπίτι καθώς τώρα δεν&amp;nbsp;μπορώ.&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ: sql cursors ή arraylist?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/62089.aspx</link><pubDate>Wed, 05 Jan 2011 00:06:31 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:62089</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/62089.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=62089</wfw:commentRss><description>OK, έχεις δίκιο. Απλά ήθελα να το δοκιμάσω κι εγώ. Δεν είμαι μαθηματικός, αλλά δεν βλέπω κάποιον τρόπο να περιοριστεί το αρχικό set των δεδομένων. Οπότε πάμε αναγκαστικά σε εκτίμηση όλων των δυνατών συνδυασμών. Επίσης, δεν υπάρχει λόγος να "χτυπάμε" τη βάση ξανά και ξανά, κάθε φορά που αλλάζουν τα όρια και πρέπει να τρέξουν από την αρχή τα queries. Φορτώνουμε τα δεδομένα στη μνήμη μια φορά και οι υπολογισμοί γίνονται εκεί.&lt;br&gt;</description></item><item><title>Απ: sql cursors ή arraylist?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/62088.aspx</link><pubDate>Tue, 04 Jan 2011 23:50:35 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:62088</guid><dc:creator>Antonios Chatzipavlis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/62088.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=62088</wfw:commentRss><description>&lt;P&gt;Μάρκο μου&lt;/P&gt;
&lt;P&gt;Και το δικό σου&amp;nbsp; και το δικό μου query έχουν ακριβώς το ίδιο execution plan. Mάλιστα έχω και εγω φτιάξει μια βάση με 10.000 εγγραφές στον Τ1 πίνακα και δοκίμασα και τα δύο χωρις όμως το τελευταίο and το αποτέλεσμα είναι ακριβώς το ίδιο 10.995.00 εγγραφές και τα δύο και οι χρόνοι σχεδόν όμοιοι 1' 31'' το δικό μου 1' 33'' το δικό σου (σημ πρώτα έτρεξα το δικό μου).&lt;/P&gt;
&lt;P&gt;Το θέμα είναι ότι ο φίλος μας αναγκαστικά έτσι όπως μας τα λεει θα φάει στο κεφάλι καρτεσιανό γινόμενο (φιλτραρισμένο μεν αλλά δεν παύει να είναι καρτεσιανό το οποίο προοδευτικά μειώνετε)&lt;/P&gt;
&lt;P&gt;Και για του λόγου το αληθες&lt;/P&gt;
&lt;P&gt;ΔΙΚΟ ΜΟΥ&lt;/P&gt;
&lt;P&gt;select y.id id1,x.id id2, abs(y.a1-x.a1) , abs(y.a2-x.a2) , abs(y.a3-x.a3)&amp;nbsp; from t1 x cross join t1 y&amp;nbsp;&amp;nbsp; where&amp;nbsp; x.id &amp;gt; y.id&amp;nbsp; and abs(y.a1-x.a1)+abs(y.a2-x.a2)+abs(y.a3-x.a3) &amp;lt; 500&lt;BR&gt;&amp;nbsp; |--Parallelism(Gather Streams)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |--Nested Loops(Inner Join, OUTER REFERENCES:([ y].[id], [ y].[a1], [ y].[a2], [ y].[a3], [Expr1004]) WITH UNORDERED PREFETCH)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |--Clustered Index Scan(OBJECT:([dnz].[dbo].[t1].[PK_t1] AS [ y]))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |--Clustered Index Seek(OBJECT:([dnz].[dbo].[t1].[PK_t1] AS [x]), SEEK:([x].[id] &amp;gt; [dnz].[dbo].[t1].[id] as [ y].[id]),&amp;nbsp; WHERE:(((abs([dnz].[dbo].[t1].[a1] as [ y].[a1]-[dnz].[dbo].[t1].[a1] as [x].[a1])+abs([dnz].[dbo].[t1].[a2] as [ y].[a2]-[dnz].[dbo].[t1].[a2] as [x].[a2]))+abs([dnz].[dbo].[t1].[a3] as [ y].[a3]-[dnz].[dbo].[t1].[a3] as [x].[a3]))&amp;lt;(500)) ORDERED FORWARD)&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;ΔΙΚΟ ΣΟΥ&lt;/P&gt;
&lt;P&gt;&amp;nbsp;select y.id id1,x.id id2--, abs(y.a1-x.a1) , abs(y.a2-x.a2) , abs(y.a3-x.a3)&amp;nbsp; from t1 x inner join ( select * from t1 ) y&amp;nbsp;&amp;nbsp; on&amp;nbsp; x.id &amp;gt; y.id&amp;nbsp; and abs(y.a1-x.a1)+abs(y.a2-x.a2)+abs(y.a3-x.a3) &amp;lt; 500&lt;BR&gt;&amp;nbsp; |--Parallelism(Gather Streams)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |--Nested Loops(Inner Join, OUTER REFERENCES:([dnz].[dbo].[t1].[id], [dnz].[dbo].[t1].[a1], [dnz].[dbo].[t1].[a2], [dnz].[dbo].[t1].[a3], [Expr1005]) WITH UNORDERED PREFETCH)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |--Clustered Index Scan(OBJECT:([dnz].[dbo].[t1].[PK_t1]))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |--Clustered Index Seek(OBJECT:([dnz].[dbo].[t1].[PK_t1] AS [x]), SEEK:([x].[id] &amp;gt; [dnz].[dbo].[t1].[id]),&amp;nbsp; WHERE:(((abs([dnz].[dbo].[t1].[a1]-[dnz].[dbo].[t1].[a1] as [x].[a1])+abs([dnz].[dbo].[t1].[a2]-[dnz].[dbo].[t1].[a2] as [x].[a2]))+abs([dnz].[dbo].[t1].[a3]-[dnz].[dbo].[t1].[a3] as [x].[a3]))&amp;lt;(500)) ORDERED FORWARD)&lt;/P&gt;</description></item></channel></rss>