2009-10-30 15 views
26

Wiem, że App Engine ma własny magazyn danych. Jest to świetne rozwiązanie w większości przypadków i dość łatwe w użyciu. Mamy jednak bazę danych MySQL, którą używamy dla kilku aplikacji i nie wszystkie są oparte na Internecie. Chcemy korzystać z App Engine z wielu powodów, ale chcielibyśmy, aby aplikacja App Engine uzyskała dostęp do naszej bazy danych MySQL. Dokumentacja, którą znalazłem, nie wskazuje wyraźnie, czy mogę to zrobić, czy nie. Czy ktoś to zrobił lub ma wskazówki do dokumentów, które pokazują, jak to zrobić?Czy mogę używać bazy danych MySQL z aplikacją App Engine?

Odpowiedz

9

Prosta odpowiedź brzmi: NIE.

Sposób dostępu do MySQL polegałby na udostępnieniu mu interfejsu usługi sieciowej.

+0

dziękuję za odpowiedź, czy masz na myśli SOAP i RESTful usług internetowych tutaj? – Dev

19

Nie można utworzyć bezpośredniego połączenia sieciowego z bazą danych. overview page opisuje główne ograniczenia, które uniemożliwią korzystanie z Mysql - w tym przypadku najważniejszym jest "arbitralne połączenie sieciowe". Możesz wykonywać tylko wywołania http (s) z poziomu silnika aplikacji.

JVM działa w zabezpieczonej „sandbox” środowiska odizolować aplikację dla obsługi i bezpieczeństwa. Sandbox zapewnia, że ​​aplikacje mogą tylko wykonywać działania, które nie zakłócają działania przy wydajności i skalowalności innych aplikacji. Na przykład aplikacja nie może odradzać wątków, zapisywać danych w lokalnym systemie plików ani uzyskiwać arbitralnych połączeń sieciowych . Aplikacja również nie może używać kodu JNI lub innego natywnego kodu . JVM może wykonywać każdy kod Java , który działa w ramach ograniczeń obszaru izolowanego .

+0

Naprawdę chciałbym wiedzieć, jak ta odpowiedź zasługuje na uwagę, zwłaszcza rok po fakcie. –

+0

To już nie jest prawda. Sprawdź Google Cloud SQL: https://code.google.com/apis/sql/docs/developers_guide_java.html –

+3

@lukas zauważysz, że nadal nie możesz połączyć się z zewnętrznymi bazami danych MySql, takimi jak pożądany program operacyjny. Jesteś ograniczony do łączenia się z bazami danych mysql hostowanych przez App Engine. Ponadto w tej chwili nie można połączyć się z bazą hostowaną w chmurze z poziomu aplikacji App Engine. –

1

Tak, ale nie jest normalne, tworząc usługę internetową lub prostą stronę php, który działa jako produkt pośredni i przekazujący dane w json lub xml.

0

jestem jeszcze w fazie uczenia się tego wszystkiego, ale jestem niemal pewien, można to zrobić teraz kilka sposobów:

  • link Aplikacje skryptów do App Engine i korzystać z JDBC i tusz do Google
  • Store bazy danych SQL na Google cloud Storage
  • Połącz Aplikacje Skrypty poprzez kalkulacyjnego skryptów
  • Użyj ich cloud SQL

"Skrypt Google Apps może nawiązywać połączenia z bazami danych za pośrednictwem JDBC z usługą Jdbc. Obecne wsparcie obejmuje MySQL, Microsoft SQL Server i Oracle. Aplikacja Skrypt ułatwia łączenie się z bazami danych hostowanymi w Google Cloud SQL, ale współpracuje również z innymi platformami do hostowania w chmurze, a nawet z lokalnymi bazami danych."https://developers.google.com/apps-script/jdbc

(origionally z App Engine Question)

3

użyciu lokalnego MySQL przykład podczas rozwoju.

import com.google.appengine.api.rdbms.AppEngineDriver; 
    public static void makeConnection() { 
     try { 
      if (conn == null || !conn.isValid(0)) { 
       String url = "localhost/databasename"; 
       String username = "root"; 
       String password = "password"; 
       DriverManager.registerDriver(new AppEngineDriver()); 
       String urlForConnection = "jdbc:mysql://" + url; 
       conn = DriverManager.getConnection(urlForConnection, username, password); 
      } 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 

// in web.xml 
    <filter> 
     <filter-name>_ah_DevSocketFilter</filter-name> 
     <filter-class>com.google.appengine.api.socket.dev.DevSocketFilter</filter-class> 
     <init-param> 
      <param-name>use-native-sockets</param-name> 
      <param-value>true</param-value> 
     </init-param> 
    </filter> 

    <filter-mapping> 
     <filter-name>_ah_DevSocketFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

Korzystanie obłokowi



    DriverManager.registerDriver(new AppEngineDriver()); 
       c = DriverManager.getConnection("jdbc:google:rdbms://instance_name/guestbook"); 

+0

dzięki za dostarczenie kodu, ten kod działa z lokalną instancją MySQL podczas programowania chcę wiedzieć, czy możliwe jest podłączenie zewnętrznej bazy danych mysql (nie w chmurze instancji MySql) z aplikacją (podczas produkcji) – Dev

+0

Nie. Można używać tylko chmury Google Cloud sql . Jest to ze względów bezpieczeństwa (tylko one nie dają Ci dostępu do swoich usług internetowych). Ale możesz połączyć Google Cloud Sql z jakimś klientem desctope, takim jak mysql workbench, aby zarządzać Google Cloud Sql na twoim komputerze – makkasi

+0

dziękuję za odpowiedź @ makkasi. – Dev

Powiązane problemy