hur fixar ni server/databas för eran mobil app

Diskussion i 'Frågor, support och diskussion' startad av agneos, 21 okt 2014.

  1. agneos

    agneos Youth Droid Medlem

    Blev medlem:
    22 jun 2010
    Inlägg:
    219
    Mottagna gillanden:
    0

    MINA ENHETER

    Hej!

    jag har börjat lite med android programmering jag har sett att andorid stöder SQLiteDatabase men min fråga är hur fixar jag en databas den den är igång 24/7 och säkert finns det sånt här tjänster?? hur brukar ni göra?? jag tänkte göra en app där den ska skicka och ta emot data från databas.

    MVH Agneos
     
    Last edited: 21 okt 2014
  2. e7andy

    e7andy Professional Droid Hedersmedlem

    Blev medlem:
    14 okt 2009
    Inlägg:
    2 350
    Mottagna gillanden:
    833
    Telefon:
    Huawei P10 Plus

    MINA ENHETER

    Telefon:
    Huawei P10 Plus
    Telefon 2:
    Nexus 5
    Telefon 3:
    ADP1
    Övrigt:
    LG G Watch R, ChromeCast
    SQLite kör du bara på din enhet. Möjligtvis att du hämtar filen från en server, men du kör inte mot den på servern.

    Det finns mängder med tjänster för att hosta databaser. De flesta webbhotell har den tjänsten. Du kan skaffa en egen server (virtuell eller dedikerad) i en datahall.
    Sen finns det mängder med molntjänster. Google Cloud, Amazon, Azure, Rackspace, Parse.com och många många fler.

    Priserna varierar. Många har gratiskonton där du kan utveckla din tjänst och sen när requesterna ökar så betalar du mer och mer.

    Det finns ett antal parametrar du behöver ta hänsyn till:
    -Varför gör du projektet? Är det för att lära dig SQL? Då ska du absolut köra på en vanlig hederlig SQL-databas. Kör då den på ett eget webbhotell så att du lär dig allt kring hur du sätter upp och kopplar dig mot den.
    -Hur många användare och requester kommer du ha? Är det bara ett hobbyprojekt eller siktar du stort? Om det är hobbyprojekt så kan du välja precis vad som helst. Ett billigt webbhotell, en databas hemma eller några gratistjänst i molnet. Siktar du stort så skaffa en tjänst i molnet som skalar och inte är tokigt dyr vid många requests.
    -SQL-databas eller någon typ av NoSQL eller kanske bara jobba med objekt och låta något ramverk sköta databasen? Själv föredrar jag egentligen SQL-databaser för det är väldigt enkelt att visualisera databasen i mitt huvud, men nu när jag kört ett år med ett ramverk som sköter allt och jag slipper hantera det mesta kring databasen så ser jag ju väldigt stora fördelar där. Fokus kan läggas helt på funktionalitet istället för plumming.
    -Kostnad? Vad har du för budget? Det finns som sagt många som är gratis för utvecklare och om du tänker köra ett hobbyprojekt så passar de bra. Om tjänsten blir populär så har de oftast enterprise-paket som du kan lägga på.
    -Inlåsning? Det finns en del tjänster som ger en viss inlåsning mot deras ramverk. Om du bara skaffar DBaaS (Database-as-a-service) så blir det ingen inlåsning förutom om du använder någon obskyr NoSQL-DB. Om du däremot tar en BaaS (Backend-as-a-service) så är riskerna större för inlåsning. Det beror på tjänsten.

    Jag kör på Parse.com. Det är en BaaS. Gratis upp till ett visst antal requester. De fixar så gott som allt åt mig. Jag behöver inte bry mig om DB-connections, SQL eller hur något egentligen lagras.
    Jag skapar ett Java-objekt och sen anropar jag save() på den så sparas den i databasen i molnet.
    Det jag är orolig för är inlåsningen mot dem. Jag måste göra en migreringsplan och se vilka andra leverantörer jag kan använda om jag nu skulle vilja gå ifrån Parse.com. Sen även göra ett testskott och flytta allt till den nya leverantören och se att det fungerar den dagen det kanske eventuellt möjligtvis blir aktuellt att flytta.
     
    ZoDeR gillar detta.
  3. dzxp3p

    dzxp3p Baby Droid Medlem

    Blev medlem:
    10 sept 2011
    Inlägg:
    19
    Mottagna gillanden:
    4

    MINA ENHETER

    Parse ser ju riktigt intressant ut. Själv har jag bara kört med olika mongodb providers i molnet. Det har fungerat bra men det ger kanske en ytterligare nivå av komplexitet om man inte är nere med NoSQL databaser.
     
  4. agneos

    agneos Youth Droid Medlem

    Blev medlem:
    22 jun 2010
    Inlägg:
    219
    Mottagna gillanden:
    0

    MINA ENHETER

    Tack för svaret det var riktigt vettigt information jag har själv laddat ner mysql workbench och jobbat med den med java JDBC men det tar långt tid och jag är inte så inresserat att lära mig databaser. Jag undrar vad är det för nytta om man ska ha sqlite istället för en exsel file??

    det jag vill göra är en boknings system så frågan är måste jag ha en server uppe och databas eller det räcker med sqlite ??

    //Agneos
     
  5. e7andy

    e7andy Professional Droid Hedersmedlem

    Blev medlem:
    14 okt 2009
    Inlägg:
    2 350
    Mottagna gillanden:
    833
    Telefon:
    Huawei P10 Plus

    MINA ENHETER

    Telefon:
    Huawei P10 Plus
    Telefon 2:
    Nexus 5
    Telefon 3:
    ADP1
    Övrigt:
    LG G Watch R, ChromeCast
    SQLite är en SQL-databas som du direkt kan köra på Android utan några tillägg. Excel går vad jag vet inte att köra som en databas på Android. Möjligtvis med något tredjepartsbibliotek, men det är nog svårt att köra SQL mot den och det blir väldigt krystat när SQLite finns som fungerar så bra.

    Om jag skulle bygga ett bokningssystem så skulle jag sätta upp en webbservice som sköter allt. Webbservicen kör på en webbserver och har en någon typ av databas där alla bokningar lagras. Vilket programmeringsspråk och vilken databas som körs är irrelevant. Använd det du kan eller tycker är kul att prova på.
    Klienterna (telefoner, plattor och datorer) använder sedan webbservicen för att administrera bokningarna.

    Jag tycker att du ska börja med att speca det system som du ska bygga så att du ser vilka krav du har. Just nu ser jag inte klart vad du vill göra.
    Vill du köra en SQLite-databas på din enhet som synkroniserar datan med en central tjänst?
    Jag tycker att det är onödigt komplicerat eftersom ett bokningssystem kräver en konstant uppkoppling. Skippa den lokala databasen och kör direkt mot servern hela tiden. Det går att lägga till en lokal databas senare om det behövs.
     
  6. Ero

    Ero Teen Droid Medlem

    Blev medlem:
    6 jan 2011
    Inlägg:
    302
    Mottagna gillanden:
    48
    Operatör:
    Telia
    Telefon:
    iPhone XS

    MINA ENHETER

    Operatör:
    Telia
    Telefon:
    iPhone XS
    Info:
    Jobbtelefon
    Vilket ramverk är det du använder?

    Jag funderar på att sätta upp en databas och köra webservice för att prata med den. Räcker det med https för att känna sig trygg (enbart vid registrering / login skickar jag "känslig data", då kan man ju kryptera det extra).
     
  7. e7andy

    e7andy Professional Droid Hedersmedlem

    Blev medlem:
    14 okt 2009
    Inlägg:
    2 350
    Mottagna gillanden:
    833
    Telefon:
    Huawei P10 Plus

    MINA ENHETER

    Telefon:
    Huawei P10 Plus
    Telefon 2:
    Nexus 5
    Telefon 3:
    ADP1
    Övrigt:
    LG G Watch R, ChromeCast
    Jag kör Parse.com. Ramverk och BaaS.

    SSL bör räcka bra och kör då all kommunikation över det.
     
  8. agneos

    agneos Youth Droid Medlem

    Blev medlem:
    22 jun 2010
    Inlägg:
    219
    Mottagna gillanden:
    0

    MINA ENHETER

    Jag har läst några java kurser och jag är väldigt intresserat av Android så jag försöker lära mig olika tekniker att göra appar jag började med activity,fragmen,lisview, slide menu O.S.V så nu tänkte jag göra appar som kommunicerar med varandra och den lösning jag kom på var att ha en databas på en server och koppala appen till det så den ska läsa/skriva till databasen, men nu gav du mig andra förslag och problemet är jag kan ingenting när det gäller webb förutom göra wordpress hemsidor (lite).
    så du menar att ha databs med phpmyadmin på en webbhotell och kommunicera med den, jag gjorde lite java program så skickade data till mysql databas som jag hade satt upp på min bärbar med mysql workbench men andriod stöder ej mysql jag måste fixa skript med php och det kan jag inte :(.
     
  9. e7andy

    e7andy Professional Droid Hedersmedlem

    Blev medlem:
    14 okt 2009
    Inlägg:
    2 350
    Mottagna gillanden:
    833
    Telefon:
    Huawei P10 Plus

    MINA ENHETER

    Telefon:
    Huawei P10 Plus
    Telefon 2:
    Nexus 5
    Telefon 3:
    ADP1
    Övrigt:
    LG G Watch R, ChromeCast
    Du ska inte kommunicera direkt med databasen. Gå istället via en webbservice i ex. PHP. Det finns mängder med tutorials för hur du sätter upp det.
    Enklast möjliga lösning är att du bara gör en HTTP POST eller GET till en PHP-sida. PHP-sidan arbetar mot databasen och skriver ut någon på sidan (helst i JSON). Din app läser responsen och gör det den ska göra.
     
  10. ihpv

    ihpv Youth Droid Medlem

    Blev medlem:
    2 apr 2011
    Inlägg:
    130
    Mottagna gillanden:
    7

    MINA ENHETER

    Ett bra sätt (dock inte testat på en live app) är att använda sig av ex. heroku.com. Då kan du få upp en server med databas (via addin) gratis och se hur det går för din app sen expandera eller flytta om det tar fart.
    I mitt utvecklingsprojekt så kör jag med en nodejs server och en mongodb databas
     
  11. dzxp3p

    dzxp3p Baby Droid Medlem

    Blev medlem:
    10 sept 2011
    Inlägg:
    19
    Mottagna gillanden:
    4

    MINA ENHETER

    Just för nodejs och mongo finns det ju väldigt mycket guider/tutorials att förkovra sig i om man vill. Ett trevligt newsletter som behandlar node som jag kan rekommendera är nodeweekly.com
     
  12. agneos

    agneos Youth Droid Medlem

    Blev medlem:
    22 jun 2010
    Inlägg:
    219
    Mottagna gillanden:
    0

    MINA ENHETER

    heej igen, jag har kollat runt lite hittade azure från MS har någon använd den ??och hörde att det var gratis för studenter och det är jätte lätt och skicka notifikationer. Så min fråga är gäller det samma för parse?? jag vill inte lägga mycket tid på det med databaser jag vill det det ska vara lätt och det ska gå snabbt och fixa.

    MVH Agneos
     
  13. e7andy

    e7andy Professional Droid Hedersmedlem

    Blev medlem:
    14 okt 2009
    Inlägg:
    2 350
    Mottagna gillanden:
    833
    Telefon:
    Huawei P10 Plus

    MINA ENHETER

    Telefon:
    Huawei P10 Plus
    Telefon 2:
    Nexus 5
    Telefon 3:
    ADP1
    Övrigt:
    LG G Watch R, ChromeCast
    Azure har jag inte testat, men vad jag sett så verkar det bra.

    I Parse finns det inbyggt för att skicka notifikationer. I tutorialen så ska det vara jättelätt, men när jag testade så lyckades jag inte så något gör jag fel. Jag har dock inte testat att köra just deras tutorial utan byggt in det i min app vilket säkert kan ställa till det.

    Mitt tips är att du testar Parse och gör några av deras tutorials. Allt är gratis och all kod finns där så det bör inte ta särskilt lång tid att utvärdera om det är något för dig.
     
  14. agneos

    agneos Youth Droid Medlem

    Blev medlem:
    22 jun 2010
    Inlägg:
    219
    Mottagna gillanden:
    0

    MINA ENHETER

    Hej igen :D!

    jag har nu bestämd mig för parse jag testat lite och den verkar vara mycket lättar än andra alternativ men jag har litet problem här, jag vill lagar bilder(mer än 5) och en geoPoint som ska vara kopplat till de bilderna.
    min lösning var att låta GeoPointen vara som referens och lägga alla bilder till men jag kan ej bestämma id:n för min objekt och jag vet inte hur kan jag retrieve alla bilder som har en specifikt geopoint. Jag söker ingen som ska göra uppgiften för mig men jag behöver spår hur skulle ni ha gjort om ni hade en geopoint kopplat till olika bilder på vilken sätt skulle ni lägga de i parse database och hämta från den.

    Tack för hjälpen:D
     
  15. Zooklubba

    Zooklubba Android Medlem

    Blev medlem:
    10 jul 2010
    Inlägg:
    6 394
    Mottagna gillanden:
    2 134

    MINA ENHETER

    En snabb tanke (trötthet och inte sovit än så jag skyller alla snedsteg på det). Databas med punkterna och sedan referera till varje bild (var varje bild finns lagrad).
    Fan, nu finns det väl så stora och billiga tjänster så det kanske bara gå att smacka upp bilderna som blobbar i databasen. Annars lagra bilderna med metadatan och spara referanser i en databas?
     
  16. e7andy

    e7andy Professional Droid Hedersmedlem

    Blev medlem:
    14 okt 2009
    Inlägg:
    2 350
    Mottagna gillanden:
    833
    Telefon:
    Huawei P10 Plus

    MINA ENHETER

    Telefon:
    Huawei P10 Plus
    Telefon 2:
    Nexus 5
    Telefon 3:
    ADP1
    Övrigt:
    LG G Watch R, ChromeCast
    ID skapas automatiskt för varje objekt du sparar i Parse så du behöver inte tänka på det.

    Jag kör mitt nuvarande projekt i Parse och för att lösa bildhanteringen så har jag skapat en klass (tabell) som kallas för "Image". I den så har jag en kolumn för "file" (länken till filen hos Amazon där bilderna lagras) och sedan en hög med metadata som beskriver bilden.

    Enklast möjliga alternativ är att bara ha klassen Image och spara samma GeoPoint för varje bild. Genom att ha en viss GeoPoint och köra en Query på den så får du fram de bilder som hör ihop.
    Bry dig inte om dupliceringen av data. Det problem som kan uppstå med duplicering är att om metadata förändras för en rad i databasen och övriga rader också måste uppdateras så måste du hantera det själv. Om metadata för en GeoPoint förändras ofta så kan det vara ett problem och varje rad som uppdateras är en request.

    Ett annat alternativ som är mer likt en relationsdatabas:
    Du har en Image-klass. Sen har du en klass som innehåller dina punkter, ex. Point. I varje point har du en kolumn "images" med en Relation till din Image-klass där du kan koppla hur många bilder du vill.
    När du vill plocka ut en GeoPoint så frågar du Point-klassen och får med dig alla bilder som är kopplade via relationen.
    Fördelen här är att ingen duplicering av data uppstår. Om metadata för en point ändras så är det bara en request mot databasen för alla bilder som hänger ihop.
     
  17. agneos

    agneos Youth Droid Medlem

    Blev medlem:
    22 jun 2010
    Inlägg:
    219
    Mottagna gillanden:
    0

    MINA ENHETER

    tack för dit svar :), jag man blir riktigt trött efter två dagars jobb med litet sömn så det blir svårt och tänka :)
     
    Last edited: 4 mar 2015
  18. agneos

    agneos Youth Droid Medlem

    Blev medlem:
    22 jun 2010
    Inlägg:
    219
    Mottagna gillanden:
    0

    MINA ENHETER

    tack för dit svar:) jag vill bara förstå det rätt när man sparar på detta sättet :

    Kod:
     ByteArrayOutputStream stream = new ByteArrayOutputStream();
    
            image.compress(Bitmap.CompressFormat.PNG, 100, stream);
    
            byte[] data = stream.toByteArray();
    
            ParseFile file = new ParseFile("braveImg.png", data);
           file.saveInBackground();
    så det är hela bilen man sparar inte bara metadata?. Jag kommer nog köra på alternativ, det är bra att jag fick några alternativ både från dig och zooklubba, ibland när man sitter mycket med kodning så får man hjärnsläpp :).
     
    Last edited: 4 mar 2015
  19. e7andy

    e7andy Professional Droid Hedersmedlem

    Blev medlem:
    14 okt 2009
    Inlägg:
    2 350
    Mottagna gillanden:
    833
    Telefon:
    Huawei P10 Plus

    MINA ENHETER

    Telefon:
    Huawei P10 Plus
    Telefon 2:
    Nexus 5
    Telefon 3:
    ADP1
    Övrigt:
    LG G Watch R, ChromeCast
    Det ser korrekt ut. Då har du sparat filen. Sen behöver du även spara "file" någonstans så att du kan hämta ut filen igen.
     
  20. agneos

    agneos Youth Droid Medlem

    Blev medlem:
    22 jun 2010
    Inlägg:
    219
    Mottagna gillanden:
    0

    MINA ENHETER

    [​IMG]

    så här har jag gjort och nu jag vill komma åt bilder med hjälp av detta kod:
    Kod:
    final ParseObject myPost = new ParseObject("ImageClass");
            myPost.put("Image", file);
    
    
    
            ParseQuery<ParseObject> querys = ParseQuery.getQuery("GeoPointClass");
            querys.whereEqualTo("ImageClass", myPost);
    
            querys.findInBackground(new FindCallback<ParseObject>() {
                public void done(List<ParseObject> commentList, ParseException e) {
                    // commentList now has the comments for myPost
    
                    Log.d("parseimage",""+commentList);
                }
            });
    men jag får null hela tiden koden är från deras parse hemsida.