Είναι Αντικειμενοστραφής βάσεις δεδομένων ακόμα σε χρήση;




Πριν από αρκετά, ενώ, έχω ακούσει για τις βάσεις δεδομένων αντικειμένου. Δροσερή ιδέα και όλα. Τώρα, με την περίπτωση ΝΤΥΠΑ παντού, όμως κάποιοι εξακολουθούν χρησιμοποιεί οποιοδήποτε από τα Αντικειμενοστραφής βάσεις δεδομένων των συστημάτων; Είναι σχετικό; Είναι πρακτικό;
OO ποτέ βάσεις δεδομένων πήρε από μια εξειδικευμένη αγορά. Είναι καλό για ορισμένες εφαρμογές - όπου η ίδια η δομή των δεδομένων προσφέρεται για να αντιπροσωπεύονται από ένα γράφημα αντικείμενο - αλλά ποτέ δεν πραγματοποιήθηκε το συναρπαστικό πλεονέκτημα σε σχέση με ένα RDBMS να διασχίσουν το χάσμα. Το βασικό πλεονέκτημα κράχτης για τα προϊόντα ΑΣΔΒΔ είναι η σφιχτή ολοκλήρωση με τη γλώσσα της χώρας υποδοχής - δεν υπάρχει κανένα αντικείμενο / σχεσιακή αναντιστοιχία αντίσταση.


Ωστόσο, εξακολουθούν να υπάρχουν αρκετοί προμηθευτές ΑΣΔΒΔ, όπως [πολύτιμων λίθων](http://www.gemstone.com) , [Versant](http://www.versant.com/) ή [Καρδινάλιος](http://www.jadeworld.com/) που κάνουν πολύ καλά με τα προϊόντα τους. Η τεχνολογία είναι χρήσιμη για ορισμένους τύπους των δομών δεδομένων και μπορεί να είναι πιο αποτελεσματική από μια RDBMS, αλλά τείνει να είναι αδύναμο για ερωτήματα ad-hoc σε σύγκριση με τις σύγχρονες διαλέκτους SQL.


Όπως [διάφοροι](https://stackoverflow.com/questions/353258/are-object-oriented-databases-still-in-use#353655)  [άλλοι](https://stackoverflow.com/questions/353258/are-object-oriented-databases-still-in-use#354508) έχουν σημειωθεί, πολύτιμος λίθος είναι να πάρει ένα κομμάτι της προσοχής λόγω της υποστήριξής τους για [Seaside](http://www.seaside.st/) και [Maglev](http://ruby.gemstone.com/) (λιμάνι της [Ruby](http://www.ruby-lang.org/en/) στην λίθος VM με [ράγες](http://www.rubyonrails.org/) που τρέχουν σε αυτό). Μπορούμε να βρούμε αυτό παίρνει τα ωραία παιδιά από πολύτιμων λίθων ένα κομμάτι του Τύπου και με το λίγο περισσότερη προσοχή στο παράδειγμα ΑΣΔΒΔ.
Αυτή είναι η γνώμη μου, αλλά? όπως ακριβώς και οι τάξεις περίπτωση δεν, θα ήθελα να εφαρμόσουν μια `copy`μέθοδο του είδους στην τάξη για να καταστεί δυνατή η τροποποίηση, διατηρώντας παράλληλα το αμετάβλητο, αλλά υπάρχει ορισμένες περιπτώσεις που δεν μπορώ να βοηθήσω να το μεταβλητό? Για παράδειγμα, όταν κάτι αναμένεται να γίνει η λειτουργία αντιγραφής είναι πολύ μεγάλη και αργή για την κατηγορία? όπως όταν η τάξη έχει τόσα πολλά συχνά τροποποιημένο μέλη. Και μην ανησυχείτε για χιλιάδες περιπτώσεις που επιπλέουν γύρω στη μνήμη, επειδή είναι αυτόματα GC'ed, οπότε το πιο πραγματικό πρόβλημα είναι ο χρόνος κόστος της αντιγραφής περιπτώσεις της κλάσης. Παρακαλώ πείτε μου εάν η γνώμη μου είναι κάπως λάθος :) Από τα περαιτέρω σχόλια που έγιναν από τον συγγραφέα, που ψάχνουν για ένα Node.js ORM που λειτουργεί με δύο οδηγούς MySQL και Oracle.


Εκεί δεν φαίνεται να είναι πολλά ΝΤΥΠΑ που ταιριάζει η περιγραφή και είναι επίσης υποστηρίζονται (προειδοποίηση - βασίζονται αποκλειστικά σε λίγες αναζητήσεις του Google).


Υπάρχει μία διαπίστωσα ότι ταιριάζει με την περιγραφή αν και ακόμα φαίνεται να υποστηρίζεται ενεργά και ότι είναι knex (βλ <https://knexjs.org> ). Όχι, `index`είναι απλά ένα όνομα που έχει εκχωρηθεί για να δείξει το δείκτη. Πρακτικά και οι δύο τύποι είναι ίδιες. δεν ξέρω αν υπάρχει τρόπος αυτό θα φανεί στο τέλος, εσείς όμως μέχρι τότε εκμεταλλευτείτε κάθε τρόπο είδος και μέθοδο εντοπισμού της αιτίας (υδραυλικούς ή μονωτές, κάμερες θερμικές ή κάμερες σωλήνων αποχέτευσης ή άλλες σχετικές μεθόδους) . τρουλλινός γιώργος , υδραυλικός , αθήνα , αττική , 6932860310. κάτι έχει γίνει λάθος στην περίπτωσης σου διότι αυτή η μετάφραση χρησιμοποιείται σε αρκετές επαγγελματικές εγκαταστάσεις εταιρειών (με εξαίρεση κάποιες περιπτώσεις που είναι custom μεταφράσεις εξειδίκευσης π.χ. ιατρεία, οδοντιατρεία, δικηγορικά γραφεία και δεν είναι online) Έκανα τα εξής:


Αποθηκεύεται αυτόματα στη βάση δεδομένων κάθε φορά που κάτι νέο ήρθε.


Στη συνέχεια έτρεξε ένα php βρόχο που κάθε λίγα λεπτά ελέγχονται για να διαπιστωθεί αν υπάρχει κάτι νέο στη βάση δεδομένων που ταιριάζει με τις παραμέτρους του νέου αυτού συμβάντος (συμπεριλαμβανομένων ότι happenned εντός του χρονικού πλαισίου των τελευταίων λεπτών). Θα χρησιμοποιηθεί `flush();`και στη συνέχεια `sleep(120);`στο βρόχο για να πάρει το βρόχο για να συνεχίσει να τρέχει κάθε λίγα λεπτά, έως ότου η νέα info ήρθε στην οποία περίπτωση θα `break();`ή `die();`. Όχι, δεν κάνει καμία διαφορά.


Προσωπικά προτιμώ το στυλ που σας δείχνουν στο Q3, μερικοί από τους συναδέλφους μου προτιμούν το στυλ στο Q1. Δεν ξέρω κανέναν που θα εξετάσει ποτέ ούτε από αυτούς να είναι *λάθος* .


Η Optimiser ερώτημα μετατρέπει το ερώτημα μέσα προς τα έξω σε κάτι εντελώς διαφορετικό, οπότε το κατηγόρημα δεν υπάρχει καν σαν μια απλή σύγκριση πια, όταν έχει κάνει με αυτό. Συνήθως πρόκειται για μια αναζήτηση σε ένα ευρετήριο ή έναν πίνακα, και όπως αυτό μπορεί να γίνει μόνο προς μία κατεύθυνση, πως το κατηγόρημα γράφτηκε δεν κάνει καμία διαφορά.


Έλεγξα (SQL Server 2005) στο σχέδιο εκτέλεσης των δύο ερωτήματα με τα τελούμενα κατηγόρημα με διαφορετική σειρά, και όπως αναμένεται να είναι πανομοιότυπα. αν κατάλαβα μιλάτε για την αντίσταση του ηλιακού θερμοσίφωνα σας, σε αυτή την περίπτωση με δείγμα την παλιά θα αναζητήσετε καινούρια από τα διάφορα σχετικά καταστήματα όπως υδραυλικών α;λλά και ηλεκτρικών ειδών. τρουλλινός γιώργος 6932860310 αναζητήσετε στο ίντερνετ για θερμική κάμερα και για κάμερα για αποχέτευση επίσης μπορείτε να ρωτήσετε και γι΄ άλλες μεθόδους με μηχανήματα πχ υπέρηχους. τρουλλινός γιώργος , υδραυλικός , αθήνα , αττική , 6932860310. Η προτιμώμενη μέθοδος είναι να χρησιμοποιήσετε πραγματικά την ιδιότητα υπό όρους για να τυλίξει τις κλήσεις εντοπισμού σφαλμάτων σας, μην χρησιμοποιήσετε τις οδηγίες μεταγλωττιστή. #ifs μπορεί να πάρει δύσκολες και μπορεί να οδηγήσει σε περίεργα προβλήματα κατασκευής.


Ένα παράδειγμα της χρήσης ενός υπό όρους χαρακτηριστικό είναι η εξής (σε C #, αλλά λειτουργεί σε VB.NET πολύ):



```
[ Conditional("Debug") ]
private void WriteDebug(string debugString)
{
  // do stuff
}

```

Κατά τη μεταγλώττιση, χωρίς το σετ σημαία DEBUG, κάθε κλήση προς WriteDebug θα καταργηθούν όπως υποτίθεται συνέβαινε με Debug.Write ().