σύνδεση λάμδα AWS Κόμβος JS να AWS RDS




Είμαι πολύ νέα για να AWS & NodeJS και απαιτούν κάποια βοήθεια στο εξής. Θα ήταν μεγάλη, αν κάποιος μπορεί να με καθοδηγήσει προς τη σωστή κατεύθυνση.


**Απαίτηση** - Θα πρέπει να αναπτύξουν ένα λάμδα AWS (NodeJS) που θα συνδεθεί με την AWS RDS (είτε Aurora / MySQL / Oracle)
 **Twist** - Αυτό το ενιαίο λάμδα θα πρέπει να είναι σε θέση να συνδέουν με όλες τις τρεις που αναφέρθηκαν RDS χωρίς σημαντική αλλαγή στον κώδικα.


Υπάρχει προσαρμογέα / middleware (π.χ. αδρανοποίησης) διαθέσιμα τα οποία μπορούν να χρησιμοποιηθούν για να επιτευχθεί αυτό;


Pls επιτρέψτε μου να ξέρω.


Ευχαριστώ εκ των προτέρων!!


Με εκτίμηση, Mousumi
Από τα περαιτέρω σχόλια που έγιναν από τον συγγραφέα, που ψάχνουν για ένα Node.js ORM που λειτουργεί με δύο οδηγούς MySQL και Oracle.


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


Υπάρχει μία διαπίστωσα ότι ταιριάζει με την περιγραφή αν και ακόμα φαίνεται να υποστηρίζεται ενεργά και ότι είναι knex (βλ <https://knexjs.org> ).
Κάνατε πολύ καλή δουλειά στο να συνοψίσετε τι είναι φοβερό στο Node.js. Η αίσθησή μου είναι ότι το Node.js είναι ιδιαίτερα κατάλληλο για εφαρμογές όπου θα θέλατε να διατηρήσετε μια μόνιμη σύνδεση από το πρόγραμμα περιήγησης πίσω στον διακομιστή. Χρησιμοποιώντας μια τεχνική γνωστή ως ["long-polling"](https://en.wikipedia.org/wiki/Push_technology#Long_polling), μπορείτε να γράψετε μια εφαρμογή που στέλνει ενημερώσεις στον χρήστη σε πραγματικό χρόνο. Η πραγματοποίηση long polling σε πολλούς από τους γίγαντες του διαδικτύου, όπως το [Ruby on Rails](https://en.wikipedia.org/wiki/Ruby_on_Rails) ή το [Django](https://en.wikipedia.org/wiki/Django_%28web_framework%29), θα δημιουργούσε τεράστιο φόρτο στον διακομιστή, επειδή κάθε ενεργός πελάτης τρώει μια διεργασία του διακομιστή. Αυτή η κατάσταση ισοδυναμεί με επίθεση [tarpit](https://en.wikipedia.org/wiki/Tarpit_(networking)). Όταν χρησιμοποιείτε κάτι όπως το Node.js, ο διακομιστής δεν έχει ανάγκη να διατηρεί ξεχωριστά νήματα για κάθε ανοιχτή σύνδεση. 


Αυτό σημαίνει ότι μπορείτε να δημιουργήσετε μια [εφαρμογή συνομιλίας με βάση το πρόγραμμα περιήγησης](https://github.com/rivalslayer/node_chat) σε Node.js που δεν χρειάζεται σχεδόν καθόλου πόρους συστήματος για να εξυπηρετεί πολλούς πελάτες. Κάθε φορά που θέλετε να κάνετε αυτού του είδους τη μακροχρόνια αναζήτηση, το Node.js είναι μια εξαιρετική επιλογή. 


Αξίζει να αναφέρουμε ότι και η Ruby και η Python έχουν εργαλεία για να κάνουν κάτι τέτοιο ([eventmachine](http://rubyeventmachine.com/) και [twisted](https://twistedmatrix.com/trac/), αντίστοιχα), αλλά ότι το Node.js το κάνει εξαιρετικά καλά, και από την αρχή. Η JavaScript είναι εξαιρετικά καλά τοποθετημένη σε ένα μοντέλο ταυτόχρονης λειτουργίας βασισμένο σε callback, και υπερέχει εδώ. Επίσης, η δυνατότητα σειριοποίησης και αποσειριοποίησης με JSON εγγενές τόσο στον πελάτη όσο και στον διακομιστή είναι αρκετά έξυπνη.


Ανυπομονώ να διαβάσω άλλες απαντήσεις εδώ, αυτή είναι μια φανταστική ερώτηση.


Αξίζει να επισημάνουμε ότι το Node.js είναι επίσης εξαιρετικό για καταστάσεις στις οποίες θα επαναχρησιμοποιήσετε πολύ κώδικα σε όλο το χάσμα πελάτη/εξυπηρετητή. Το [Meteor framework](https://meteor.com) το κάνει αυτό πολύ εύκολο, και πολλοί άνθρωποι προτείνουν ότι αυτό μπορεί να είναι το μέλλον της ανάπτυξης ιστοσελίδων. Μπορώ να πω από την εμπειρία μου ότι είναι πολύ διασκεδαστικό να γράφεις κώδικα στο Meteor, και ένα μεγάλο μέρος αυτού είναι να ξοδεύεις λιγότερο χρόνο σκεπτόμενος πώς θα αναδομήσεις τα δεδομένα σου, ώστε ο κώδικας που εκτελείται στο πρόγραμμα περιήγησης να μπορεί εύκολα να τα χειριστεί και να τα μεταβιβάσει πίσω.


Εδώ είναι ένα άρθρο για το Pyramid και το long-polling, το οποίο αποδεικνύεται ότι είναι πολύ εύκολο να ρυθμιστεί με λίγη βοήθεια από το gevent: [*TicTacToe και Long Polling με την Pyramid*](http://michael.merickel.org/2011/6/21/tictactoe-and-long-polling-with-pyramid/). Αν ψάχνετε για την αλληλεπίδραση που αντιμετωπίζουν χρήστη, ραβδί με xml. Έχει περισσότερη υποστήριξη, κατανόηση, και τη γενική αποδοχή του παρόντος. Αν είναι εσωτερικά, θα έλεγα ότι προσκρουστήρες πρωτόκολλο είναι μια μεγάλη ιδέα.


Ίσως σε μερικά χρόνια, καθώς περισσότερα εργαλεία για να βγει να υποστηρίξει ρυθμιστικά πρωτόκολλο, στη συνέχεια, να αρχίσει να ψάχνει προς αυτή την κατεύθυνση για μια δημόσια api επένδυση. Μέχρι τότε ... [JSON](http://en.wikipedia.org/wiki/JSON) ; <p>είχα το ίδιο πρόβλημα χρησιμοποιώντας asp.net mvc και <a href="http://victorblog.com/2012/12/20/make-angularjs-http-service-behave-like-jquery-ajax/">βρήκα τη λύση εδώ</a> </p><blockquote> <p>υπάρχει μεγάλη σύγχυση μεταξύ των νεοεισερχομένων στο <strong> angularjs </strong> για το γιατί οι <code>$http</code> λειτουργίες στενογραφίας της υπηρεσίας (<code>$http.post()</code>, κλπ.) δεν φαίνονται να είναι εναλλάξιμες με το <strong> ισοδύναμα jquery </strong> (<code>jquery.post()</code>, κ.λπ.)</p> <p>η διαφορά είναι στον τρόπο <strong> jquery </strong> και <strong> angularjs </strong> σειριοποίηση και μετάδοση των δεδομένων. βασικά, το πρόβλημα έγκειται στη γλώσσα του server σας που δεν είναι σε θέση να καταλάβει τη μετάδοση του angularjs με εγγενή ... από προεπιλογή, <strong> jquery </strong> μεταδίδει δεδομένα χρησιμοποιώντας</p> <pre><code>content-type: x-www-form-urlencoded </code></pre> <p>και την εξοικειωμένη σειριοποίηση <code>foo=bar&amp;baz=moe</code>.</p> <p><strong> το angularjs </strong>, ωστόσο, μεταδίδει δεδομένα χρησιμοποιώντας</p> <pre><code>content-type: application/json </code></pre> <p>και <code>{ "foo": "bar", "baz": "moe" }</code></p> <p>η σειριοποίηση json, η οποία, δυστυχώς, μερικές γλώσσες διακομιστή web - <em> και συγκεκριμένα η php </em> - δεν απομακρύνονται εγγενώς.</p> </blockquote><p>δουλεύει άψογα.</p><p><b>κωδικας</b></p><pre><code>// your app's root module... angular.module('mymodule', [], function($httpprovider) { // use x-www-form-urlencoded content-type $httpprovider.defaults.headers.post['content-type'] = 'application/x-www-form-urlencoded;charset=utf-8'; /** * the workhorse; converts an object to x-www-form-urlencoded serialization. * @param {object} obj * @return {string} */ var param = function(obj) { var query = '', name, value, fullsubname, subname, subvalue, innerobj, i; for(name in obj) { value = obj[name]; if(value instanceof array) { for(i=0; i&lt;value.length; ++i) { subvalue = value[i]; fullsubname = name + '[' + i + ']'; innerobj = {}; innerobj[fullsubname] = subvalue; query += param(innerobj) + '&amp;'; } } else if(value instanceof object) { for(subname in value) { subvalue = value[subname]; fullsubname = name + '[' + subname + ']'; innerobj = {}; innerobj[fullsubname] = subvalue; query += param(innerobj) + '&amp;'; } } else if(value !== undefined &amp;&amp; value !== null) query += encodeuricomponent(name) + '=' + encodeuricomponent(value) + '&amp;'; } return query.length ? query.substr(0, query.length - 1) : query; }; // override $http service's default transformrequest $httpprovider.defaults.transformrequest = [function(data) { return angular.isobject(data) &amp;&amp; string(data) !== '[object file]' ? param(data) : data; }]; }); </code></pre> Ένας τρόπος θα ήταν να ορίσετε μια μεταβλητή περιβάλλοντος συστήματος όπως το «JAVA\_HOME» και να τις χρησιμοποιούν. 


Μπορεί να μην είναι η καλύτερη λύση, αλλά θα μπορούσε να λειτουργήσει, και αυτό είναι ό, τι άλλες εφαρμογές που απαιτούν JDK και όχι JRE (όπως CruiseControl) απαιτεί από εσάς να κάνετε όταν τα δημιούργησαν. Μπορώ να μιλήσω μόνο για το .net, αλλά αν έχετε ένα Webservice ASP.net, θα πρέπει να μπορείτε να προσθέσετε μια απαρίθμηση απευθείας σε αυτό.


Όταν στη συνέχεια χρησιμοποιήστε το «Add Web αναφοράς» στην Εφαρμογή Πελάτη σας, η προκύπτουσα κατηγορίας θα πρέπει να περιλαμβάνει αυτό το enum


Αλλά αυτό είναι από την κορυφή του κεφαλιού μου, είμαι αρκετά σίγουρος ότι έχω κάνει και στο παρελθόν, αλλά δεν μπορώ να πω με σιγουριά. Υπάρχουν κάποιες «αμυχές» που περιλαμβάνουν τη χρήση ενός System.Core.dll από το Framework 3.5 για να τρέξει με .net 2.0, αλλά προσωπικά δεν θα ήθελα να χρησιμοποιήσετε ένα τέτοιο κάπως σαθρά θεμέλια.


Δείτε εδώ: [LINQ υποστήριξη για .NET 2.0](http://weblogs.asp.net/fmarguerie/archive/2007/09/05/linq-support-on-net-2-0.aspx)



> 
> 1. Δημιουργήστε μια νέα εφαρμογή κονσόλας
> 2. Κρατήστε μόνο συστήματος και System.Core όπως αναφέρεται συνελεύσεις
> 3. Ρύθμιση αντιγραφής Τοπική να ισχύει και για System.Core, επειδή δεν υπάρχει στο .NET 2.0
> 4. Χρησιμοποιήστε ένα ερώτημα LINQ στην Κύρια μέθοδο. Για παράδειγμα, η μία κάτω.
> 5. Χτίζω
> 6. Αντιγράψτε το σύνολο της παραγωγής κάδο σε μια μηχανή όπου μόνο είναι εγκατεστημένο το .NET 2.0
> 7. Τρέξιμο
> 
> 
> 


(Απαιτεί .net 2.0 SP1 και δεν έχω ιδέα αν ομαδοποίηση του System.Core.dll παραβιάζει την EULA) AppSettings / ConnectionStrings θα είναι πάντα να διαβαστούν από τον τρέχοντα πισίνα app.


Με αυτό εννοώ:


Αν έχω `A.exe`οποία έχει μια τάξη `DAL.cs`. DAL.cs διαβάζει ένα string σύνδεση από config, και επιστρέφει `"abc"`με τον αναμενόμενο τρόπο.


Στη συνέχεια μετακινήστε DAL.cs στο δικό του έργου του, και ως εκ τούτου, τη δική του συνέλευση. Μπορώ ακόμα να το έχουν καλέσει τη συμβολοσειρά σύνδεσης από app.config, όμως, **θα πρέπει να «φιλοξενούν» το συγκρότημα σε μια εφαρμογή που εκτελείται, και προσθέστε τη συμβολοσειρά σύνδεσης του εν λόγω αιτήσεις εφαρμογή ρυθμίσεων** . Έτσι, μπορώ να δημιουργήσω ένα νέο app.config και να καθορίσετε τη συμβολοσειρά σύνδεσης `"xyz"`σε αυτό, όταν τρέχει, τρέχει όπως αναμενόταν.


Τώρα, αν μπορώ να αλλάξω την αναφορά στο `A.exe`έργο να χρησιμοποιήσει το νέο `DAL.dll`, string ποια σχέση πιστεύεις ότι θα έχει; `"xyz"`; Οχι! Θα χρησιμοποιήσετε το `"abc"`όπως έκανε πριν, διότι αυτό εξακολουθεί να διαμορφώνεται στο αρχείο ρύθμισης παραμέτρων εφαρμογής για `A.exe`.


Ξέρω ότι αυτό λειτουργεί, επειδή χρησιμοποιείται από κοινού κωδικό DAL σε πολλές των Windows **και** τις εφαρμογές Web.


Εάν οποιαδήποτε από αυτό είναι ασαφείς, ή δεν βοηθά το πρόβλημά σας, παρακαλώ ενημερώστε με σχολιάζοντας αυτήν την απάντηση.


 Ενημέρωση παρακάτω σχόλιο από Ε.Π.


Με τον όρο «υποδοχής» Θέλω να πω μια εφαρμογή που καλεί το κοινό κώδικα. Αυτό μπορεί να είναι έναν υπολογιστή με Windows ή μια εφαρμογή Web, ουσιαστικά είναι το πλαίσιο εφαρμογής.


Θα χρειαστεί να δημιουργήσετε καταχωρήσεις στα αρχεία ρυθμίσεων για κάθε εφαρμογή που χρησιμοποιεί το κοινό κώδικα. Αν κατάλαβα καλά το αρχικό σας ερώτημα (απολύτως εφικτό, αυτό είναι μια μεγάλη μέρα!) Και θέλετε να συγκεντρώνει τη διαμόρφωση, καθώς, τότε θα πρέπει να:


* Δημιουργήστε κάποια μορφή κεντρικής αποθήκευσης (είτε πρόκειται για XML, η DB, οτιδήποτε).
* Βελτιώστε την κοινή κωδικό σας για να έχετε προκαθορισμένες τιμές ώστε να μπορεί να συνδεθεί με την κεντρική αποθήκευση.
* Από εκεί, ο κώδικας μπορεί στη συνέχεια να ρυθμίσετε τον εαυτό της, με βάση τις πληροφορίες στο κατάστημα διαμόρφωση.


Η ελπίδα αυτό βοηθά :) Θα ήθελα να συστήσω σίγουρα [Weka](http://www.cs.waikato.ac.nz/ml/weka/) το οποίο είναι ένα *Open Source λογισμικό εξόρυξης δεδομένων* γραμμένο σε Java:



> 
> Weka είναι μια συλλογή από αλγόριθμους μηχανικής μάθησης για εργασίες εξόρυξης δεδομένων. Οι αλγόριθμοι μπορούν είτε να εφαρμοστούν άμεσα σε ένα σύνολο δεδομένων ή καλείται από το δικό σας κώδικα Java. Weka περιέχει εργαλεία για τα δεδομένα προ-επεξεργασία, ταξινόμηση, παλινδρόμηση, ομαδοποίηση, κανόνες συσχέτισης, και την απεικόνιση. Είναι επίσης κατάλληλη για την ανάπτυξη νέων συστημάτων μηχανικής μάθησης.
> 
> 
> 


Όπως αναφέρθηκε παραπάνω, τα πλοία με μια δέσμη των διαφορετικών ταξινομητών όπως [SVM](http://en.wikipedia.org/wiki/Support_vector_machine) , [Winnow](http://en.wikipedia.org/wiki/Winnow_%28algorithm%29) , [C4.5](http://en.wikipedia.org/wiki/C4.5_algorithm) , Naive Bayes (φυσικά) και πολλά άλλα (βλέπε την [doc API](http://weka.sourceforge.net/doc/) ). Σημειώστε ότι πολλές ταξινομητές είναι γνωστό ότι έχουν **πολύ καλύτερη παράσταση από Naive Bayes** στον τομέα της ανίχνευσης spam ή ταξινόμησης κειμένου.


Επιπλέον Weka σας φέρνει ένα πολύ [ισχυρό γραφικό περιβάλλον](http://www.cs.waikato.ac.nz/~ml/weka/gui_explorer.html) ... 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/) που τρέχουν σε αυτό). Μπορούμε να βρούμε αυτό παίρνει τα ωραία παιδιά από πολύτιμων λίθων ένα κομμάτι του Τύπου και με το λίγο περισσότερη προσοχή στο παράδειγμα ΑΣΔΒΔ. Θα μπορούσατε να δημιουργήσει ένα XSLT για να κάνω αυτή τη δουλειά για σας. XSLT έχει σχεδιαστεί ειδικά για τη μετάφραση των δεδομένων XML σε κάποια άλλη μορφή κειμένου, συμπεριλαμβανομένων των XML. Για περισσότερες πληροφορίες σχετικά με XSLT, συστήνω [W3 σχολεία](http://www.w3schools.com/xsl/default.asp) .