我需要不断地从 SQLite 迁移到 PostgreSQL。不断地,我的意思是我每天都会将 SQLite 数据库重新导入 PostgreSQL。如果我可以随意更改 SQLite 中的表,而不必手动对 PostgreSQL 数据库进行任何更改,那就太好了。我将从 Python 运行迁移,但它可以是任何可以从命令行控制的外部工具。该工具需要可用于 Linux,如果它也能在 Windows 上运行就好了。
我们正在创建 SAAS,我们最多将拥有 50.000 名客户。我们正在考虑在 Postgres 数据库中为每个客户创建一个用户。我们会将登录我们服务的每个用户映射到数据库中的用户,以确保他们只能访问自己的数据。我们还希望通过此解决方案直接在数据库中实施审计跟踪,它利用触发器。如果每个客户都有自己的数据库用户,那么即使两个客户共享相同的数据,也很容易看出谁做了什么。
因为我们的数据库中有 50.000 个用户,我们会遇到一些意想不到的问题吗?性能方面或管理方面。也许连接池会更困难,但我真的不知道我们是否需要它。
Astor Data、Greenplum 和 GridSQL 都允许对 SQL 查询进行大规模并行处理。它们也都是围绕 PostgreSQL 技术构建的。这仅仅是因为许可问题还是有其他原因?对我来说,它看起来像 MyISAM,不符合 ACID,因此不会遇到与 MVCC 相同的问题(如这里所见),因为 PostgreSQL 更适合构建高性能数据仓库。毕竟,就我所见,OLAP 负载不需要事务。
据我所知,硬盘每旋转一圈可以有一次磁盘搜索,因此我很想知道将一行写入 SQLite 表需要多少磁盘搜索,包括锁定等。假设没有索引在桌子上(甚至不是主键)。我假设有一个磁盘试图将一行写入文件?如您所知,我想将性能与将相同数据写入平面文件进行比较。
我需要一个可以利用多个服务器并行处理单个 SQL 查询的数据库引擎。到目前为止,我知道某些引擎可以做到这一点,尽管由于定价或缺少功能,它们对我来说都不可行。我目前已知的引擎是:
还有哪些引擎有这个功能?您有使用此功能的经验吗?
编辑:我现在提出了一种自己创建的方法。欢迎任何意见。
Edit2:我找到了另一个:Informix Extended Parallel Server
Edit3:Stado是一个新的。
Edit4:也许还有pgpool-II,他们写道:
并行查询
使用并行查询功能,可以将数据分到多台服务器上,从而可以在所有服务器上同时执行一个查询,减少整体执行时间。
通过使用 EXPLAIN 可以看到运行查询的成本。成本以人工单位为单位,它们基于预定义的参数。我相信,1 是一个磁盘提取,一个 CPU 周期是 0.01 个单位。我的问题是为什么 PostgreSQL 在安装时不会自动运行测试以确定基于硬件的实数?这不应该是一个明显的快速胜利吗?
有时,在大型公司中启动并运行合适的数据库服务器可能需要数月时间。他们有各种各样的政策,这意味着这个过程需要几个月的时间。与此同时,另一种方法是将 SQLite 数据库直接放在文件服务器上。这对于有限数量的用户非常有效(我已经成功地为 100 个用户提供服务,使用一个这样的数据库),并且只推荐用于非关键数据。现在我一直在考虑获取数据库的方法,该数据库放置在文件服务器上以便能够处理十倍的用户。我的基本想法是利用公司周围许多闲置的台式电脑。同样,数据不是关键的,数据库访问可能很慢,99.0% 的正常运行时间就足够了。
您是否看到任何方法可以利用这些最理想的台式计算机来帮助减少文件服务器上的负载?您对最适合的 DBMS 有任何想法吗,SQLite 只是我的第一个想法。最好是开源的,这样我就可以聘请某人为此目的对其进行调整。或者,我有兴趣为此目的从头开始构建 DBMS。
我知道任何有经验的 DBA 都会对这个问题不屑一顾,但由于这些公司的政策,它们确实有价值。
我正在考虑扩大规模而不是扩大规模。因此,我很想知道将 MySQL 内存存储引擎用于 500+ GB 的数据库是否可行,因为有一台服务器,具有这种内存?我应该提到对表的查询主要是临时查询。
我相信我发现会出现的一个问题是对 MEMORY 表的查询可能会导致创建临时表。临时表在转换为 MyISAM 表之前有一个硬性限制,即最多使用4 GB的 RAM。这当然会完全杀死性能。临时表的内存限制可以通过将tempdir设置为 ramdisk 来解决。
您还预见到哪些其他类型的问题?
我在我们的数据库中有一个非常重要的表,它被一系列应用程序使用,它附有规则、触发器和您可以想象的所有依赖项。现在我想修改表而不会对依赖项造成任何问题。我以前成功地执行了以下操作,但在一个不太复杂的情况下:
alter table reconciliations rename to matches;
create view reconciliations as select * from matches;
Run Code Online (Sandbox Code Playgroud)
这实现的是我现在可以修改新的“匹配”表,例如添加一列或多行,这些列或行不需要在“对帐”视图中显示(通过添加 where 子句来过滤它们)。
我使用的是 Postgres 9.5,因此视图可以自动更新。初步测试表明,这没有直接问题,所以我问这个问题是为了知道我应该寻找什么样的问题。性能不是大问题。
postgresql ×5
sqlite ×3
migration ×2
mysql ×2
performance ×2
rdbms ×2
csv ×1
memory ×1
myisam ×1
parallelism ×1
scalability ×1
tools ×1
users ×1
view ×1