Quale database open source è l'opzione migliore per un sistema relativo alla contabilità? [chiuso]

StackOverflow https://stackoverflow.com/questions/411976

Domanda

Sono nelle prime fasi di pianificazione e progettazione di un'applicazione di contabilità personalizzata per la mia azienda. Il mio obiettivo è utilizzare un database relazionale open source per la parte di archiviazione dei dati e sono a conoscenza di due database solidi ampiamente supportati: MySQL e PostgreSQL.

Per un sistema che richiederà transazioni, stored procedure, funzioni e sicurezza, ci sono opinioni su quale di questi due database sarebbe più adatto per un'applicazione di contabilità o c'è un altro database che mi manca?

Ho più familiarità con MySQL e MS SQLServer 2005, ma sto cercando di allontanarmi da quest'ultimo a causa dei costi di licenza.

Consentitemi di aggiungere: non si tratta di un'esigenza contabile come Quickbooks o Peachtree. Questo è fondamentalmente un sistema che gestisce la contabilità per un servizio aziendale specifico che forniamo. Esistono forse due o tre sistemi che soddisfano questa esigenza, hanno un prezzo compreso tra sei cifre prima di qualsiasi personalizzazione e richiederebbero che la mia piccola azienda fosse sposata con un fornitore a lungo termine. Pertanto, stiamo sviluppando l'applicazione internamente.

Inoltre, mentre apprezzo l'argomento Compra contro build , mi piacerebbe allontanarmi da quella particolare domanda religiosa perché la strada di acquisto era già stata presa e il venditore fallì miseramente. A volte devi solo fare il lavoro da solo e questo particolare progetto e budget lo garantiscono.

Grazie per le risposte di tutti finora.

È stato utile?

Soluzione

Esistono quattro principali sistemi di gestione di database relazionali open source che potrebbero essere appropriati per questo tipo di applicazione: Postgresql, MySQL, Firebird e Ingres. Esistono altri sistemi come SQLite, ma non hanno questo tipo di architettura e non sono realmente progettati per questo tipo di carico di lavoro. Esistono altri sistemi di gestione di database open-source di questo tipo, ma non sembrano essere fattibili per qualche motivo, come la mancanza di un apparente impegno del fornitore. Un esempio di un sistema che presenta questo tipo di problema è SAP-DB.

Postgresql ha il miglior set di funzionalità di qualsiasi database open source e supporto per le transazioni XA, che probabilmente vorrai se la tua applicazione è un sistema a tre livelli e supporta transazioni di complessità non banale. In particolare, lo desidererai se desideri effettuare transazioni che coprono più di una chiamata al database.

Nel corso degli anni sono state costruite diverse varianti commerciali di PostgreSQL, come Illustra, Greenplum e EnterpriseDB. Illustra è stata una versione commerciale di PostgreSQL che è stata successivamente acquistata da Informix. Greenplum è una versione semplificata progettata per applicazioni di data warehousing. EnterpriseDB è una società che fornisce alle versioni commerciali supportate di PostgreSQL alcuni software a valore aggiunto.

MySQL 5.x ha un set di funzionalità che supporta una sezione trasversale ragionevole di funzionalità, ma non lo è ricco di funzionalità come PostgreSQL. Ha un'accettazione mainstream più diffusa e sarebbe il più semplice dei sistemi di gestione di database open source per cui reclutare sviluppatori qualificati. Sebbene le versioni precedenti non avessero un solido supporto delle transazioni, i motori di archiviazione transazionale come InnoDB sono disponibili da tempo. La current politica circostante l'acquisizione da parte di Sun ha generato forcelle di codice e il panorama MySQL è un po 'confuso, con polemiche su problemi di qualità nella versione 5.1. Tuttavia, MySQL è di gran lunga il più popolare e noto tra i sistemi di gestione di database open source ed è il solo uno con un significativo riconoscimento del marchio al di fuori delle cerchie open source.

Firebird è una versione open source di Interbase. L'ultima volta che ho guardato, non aveva il supporto XA ma andrebbe bene se la tua applicazione fosse configurata come un sistema client-server a due livelli. Aggiornamento: non riesco a trovare una specifica definitiva su questo, ma la documentazione indica che ha il supporto per il commit in due fasi, ma ciò che ho potuto trovare non era specifico sul fatto che supportasse il protocollo XA . La documentazione implica che il driver JDBC ha il supporto per i commit a due fasi.

Una variante interessante di questo sistema è Fyracle , progettato per offrire una laurea di compatibilità con Oracle. Questo è stato originariamente sviluppato per essere utilizzato come back-end per Compiere , che è stato creato contro Oracle e strettamente associato a esso.

Ingres è ora disponibile con una licenza open source, ma è stato accolto con un po 'di un collettivo sbadiglio dalla comunità open-source. Tuttavia è piuttosto ricco di funzionalità e molto maturo: conosco persone che stavano realizzando app INGRES nel 1990 e risale agli anni '80.

Altri suggerimenti

Il mio consiglio? Non farlo. Meglio comprarne uno. Le persone che sanno di più sulla contabilità hanno scritto buoni pacchetti che già trattano con GAAP. Hanno una base di utenti più ampia di quella che avrai mai, che scoprirà i difetti più velocemente. Questo è un classico "compra contro build". Non c'è alcun vantaggio competitivo per la tua azienda scrivendo la propria. Se lo stai facendo perché sei preoccupato per i costi di licenza, direi che non hai tenuto correttamente conto dei tempi di sviluppo. Questo è l'unico modo in cui potresti giustificare farlo internamente.

Detto questo, se sei preoccupato per i costi di licenza di SQL Server, consiglierei PostgreSQL prima o MySQL seconda come database di tua scelta.

Sono pienamente d'accordo con le risposte di duffymo e tuinstoel e altri. Riconsidera la tua decisione di costruzione vs. acquisto. Lascia che ti racconti una storia:

Mentre lavoravo in una società di medie dimensioni (entrate internazionali, $ 100 milioni all'anno), il CFO ha deciso di sostituire i sistemi finanziari con Oracle Financials. Solo quel pacchetto non corrispondeva esattamente alle pratiche contabili utilizzate da questa società.

Quindi il CFO ha assunto un team di programmatori a contratto e li ha pagati per personalizzare Oracle Financials alle pratiche contabili preferite. Ha sprofondato 12 mesi di tempo, $ 1 milione in salari da programmatore, oltre al costo iniziale del software, solo per duplicare il sistema contabile che avevano intenzione di sostituire.

Ha detto che se dovesse ricominciare da capo, acquisterebbe il pacchetto commerciale, ma adatterà le abitudini contabili dell'azienda alle impostazioni predefinite supportate dal software. Sarebbe molto più semplice, rapido e più probabile che abbia successo.

Quindi considera il costo di costruzione del tuo pacchetto personalizzato. Considera anche i costi continui per la tua azienda di manutenzione, debug e miglioramento per quel software. Anche se acquisti un pacchetto commerciale a sei cifre, probabilmente sarà meno costoso che pagare i programmatori per sviluppare e mantenere un tale sistema.


Per rispondere più direttamente alla domanda dichiarata, non penso che ci sia una differenza significativa tra PostgreSQL e MySQL che è rilevante per il tuo progetto. Dato che sei a tuo agio con MySQL, potresti anche andare con quello.

Vorrei offrire un promemoria obbligatorio per non utilizzare tipi di dati inesatti come FLOAT o DOUBLE PRECISION per i dati finanziari.

Per qualsiasi applicazione che desidera utilizzare un database open source, la risposta diretta è Postgres. È MOLTO più "pronto per l'impresa" di MySQL, per non parlare del fatto che segue lo standard SQL molto meglio. MySQL è migliorato molto con le sue versioni successive, ma Postgres lo batte ancora in ogni categoria.

Esistono sistemi di contabilità gratuiti open source. Come osFinancials. Non riesco davvero a capire perché vuoi costruire il tuo sistema?

Per la tua applicazione, non importa davvero. Qualsiasi cosa, da SQLite a MySQL a Postgres, probabilmente funzionerebbe bene. Scegli quello con cui hai più familiarità.

Se hai familiarità con MySQL, usalo. Ma seleziona il motore di database corretto anziché MyISAM predefinito

Elenco dei motori di archiviazione

Onestamente, qualsiasi dei soliti sospetti farà il lavoro. Il mantenimento del piano dei conti e delle relative tabelle dei dati è il problema principale che ha guidato gran parte del modello relazionale. In effetti, se si pensa alla vista del journal generale di un sistema contabile, tutto ciò che è è il piano contabile e il journal generale, composto da numero di transazione, data, descrizione, conto di addebito e importo, conto credito e importo. Tutto il resto che fai è un SELEZIONARE su quelli.

Detto questo, tuttavia, ci sono così tanti pacchetti finanziari perfettamente adeguati, ben collaudati e accettati, comprese le versioni open source gratuite (come nella birra), che a meno che non lo si intenda per un titolo, un progetto di studio , Mi impegnerei a cercare su Google e selezionarne uno.

Ho visto il tuo aggiornamento. Il fatto è che questo è un problema che sarà principalmente determinato da requisiti non funzionali. Distribuirai il database su più di un server? quanto carico ti aspetti? Transazioni al secondo o transazioni al giorno? Ho costruito sistemi intorno a entrambi negli ultimi due anni, e di solito i requisiti di affidabilità e disponibilità sono i più decisivi: PostgreSQL gestisce gli aggiornamenti simultanei di una singola riga in modo più efficace, applicando l'atomicità delle righe e serializzando gli aggiornamenti simultanei. D'altra parte, MySQL sembra gestire meglio database molto grandi. Tuttavia, una terza domanda è il backup: uno di questi (non ricordo quale sia il momento) richiede più o meno tempo di inattività per il backup.

Per un'applicazione di contabilità interna basata sul web, potresti stare meglio con Gemstone come database di oggetti libero ma non open source e Seaside come framework web. Altrimenti noto come GLASS.

Per un'applicazione interna, avrai uno sforzo limitato per gli sviluppatori. La pietra preziosa, come immagine a chiazze piccole, offre di gran lunga la migliore produttività degli sviluppatori. Il supporto per la migrazione di oggetti quando si modifica la loro definizione consente un vero sviluppo iterativo. Seaside sostituisce i modelli con un linguaggio specifico del dominio ben progettato per la creazione di applicazioni Web.

Realizzo software di contabilità su PostgreSQL. Funziona molto bene Lo consiglio vivamente. In effetti (spina spudorata), potresti prendere in considerazione l'idea di lavorare con noi per migliorare il nostro progetto e utilizzarlo come punto di partenza.

Ci sono un paio di ragioni in particolare:

  1. ASCOLTA / NOTIFICA ti dà la possibilità di agganciare altri programmi al tuo db di contabilità quando qualcosa cambia senza dover controllare le tabelle ogni tanto.
  2. Abbiamo trovato ottime prestazioni con le query più complesse.

Firebird e Ingres ti daranno una soluzione relazionale molto solida. MySQL non lo consiglierei perché stai davvero legando tutto a un'unica app che può scrivere nel db (la modalità sql significa che le relazioni sono fondamentalmente un'API privata anziché l'API pubblica che sono in PostgreSQL, Firebird e Ingres) e questo significa meno flessibilità lungo la strada.

Tuttavia, con PostgreSQL, in una scatola si ottiene una piattaforma di sviluppo estensibile di prim'ordine. Il ritmo di sviluppo è elevato. È solido come una roccia. Le funzionalità avanzate sono molto utili. Non rimarrete delusi. Non lo siamo stati.

Se questa è un'applicazione desktop, potresti voler guardare SQLite. È molto noto, di dominio pubblico, e non è terribilmente difficile lavorare con.

Dato che non hai bisogno di procedure memorizzate, togli la lista.

Sarai molto più felice di inserire la logica di business nel codice, non nel database. Se hai la possibilità di avviare " clean " ;, quindi utilizza il database per ciò che ha più senso: la persistenza non viene elaborata.

Una volta presa questa decisione, le sottili differenze tra MySQL e PostgreSQL scompaiono. Entrambi sono motori relazionali che gestiscono SQL quasi identici. Concentrati sulle cose che fanno meglio.

Raccomandazione : rendi la tua applicazione indipendente dalle peculiarità del database.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top