标签: database-partitioning

Mysql提高了SELECT速度

我目前正在尝试提高MySQL表的SELECTS速度,并希望了解有关改进它的方法的任何建议.

表中有超过3亿条记录,表中有结构标记,日期,值.主键是标签和日期的组合键.该表包含大约600个唯一标签的信息,这些标签大多数包含平均约400,000行但可以在2000到超过1,100万行的范围内.

针对表运行的查询是:

  SELECT date,
         value 
    FROM table 
   WHERE tag = "a" 
     AND date BETWEEN 'x' and 'y' 
ORDER BY date
Run Code Online (Sandbox Code Playgroud)

....如果有任何插入,很少.

我已经尝试按标签将数据划分为不同数量的分区,但这似乎没有增加速度.

mysql sql database-design query-optimization database-partitioning

10
推荐指数
1
解决办法
5008
查看次数

Oracle分区 - 错误ORA14400 - 插入的分区键不映射到任何分区

我正在尝试在分区表中插入信息,但我不知道我做错了什么!告诉我这个错误:ORA-14400: inserted partition key does not map to any partition"

该表dba_tab_partitions显示了以下信息:

1   PDIA_98_20091023    0
2   PDIA_98_20091022    0
3   PDIA_98_20091021    0
4   PDIA_98_20091020    0
5   PDIA_98_20091019    0
Run Code Online (Sandbox Code Playgroud)

请帮帮我

oracle database-partitioning

10
推荐指数
1
解决办法
10万
查看次数

如何对水平分区数据进行排序

我有一个电信计费软件系统.其中包含用户呼叫的每日日志.日志按日期(月)水平分区.每个分区都存储在一个单独的数据库中,可以分布在多个实例上.

在UI中,用户将指定日期范围.返回的数据可以在任何字段上排序.日期范围可能跨越多个分区.应用程序必须支持通过日期范围的数据进行分页.

我无法将太多记录加载到内存中进行排序.在查询中放置排序只能在一个结果集中提供排序数据.

所以我需要对多个分区中的数据进行排序,每个分区都是单独排序的 如何从多个排序结果集中将已排序记录返回到UI?

编辑:经过对此问题的更多分析,我们有更多的输入.也需要分页.因此,我们需要找到一种方法来对多个结果集进行实时排序.

java sorting database-partitioning

10
推荐指数
1
解决办法
256
查看次数

在Azure Cosmos DB中,我们可以稍后在开始时决定更改分区密钥

我是Cosmos DB的新手,我注意到我们可以根据需要设置分区键,以便通过以下代码有效扩展:

DocumentCollection myCollection = new DocumentCollection();
myCollection.Id = "coll";
myCollection.PartitionKey.Paths.Add("/deviceId");
Run Code Online (Sandbox Code Playgroud)

问题是我们可以在创建集合之后更改分区键并指定分区键吗?我可能会发现分区键的选择以后不合适.

database-partitioning azure-cosmosdb

10
推荐指数
1
解决办法
3387
查看次数

分片如何处理关联表的连接?

当我阅读有关分片的内容时,看起来作者没有考虑到分片表必须连接到的其他表(即使他们将分片描述为“原始数据库的子集”)。但是,这是一种非常常见的情况,我仍然不知道如何处理。一些作者提到了由可复制到每个分片(例如Country)的分片表引用的“静态”表。但是,他们没有提及引用分片表的表。

想象一下,我们运行一个社交网络并意识到我们的User表(id, name)不再适合单个服务器,因为写入量或大小(或两者)。所以我们决定将它水平分割成多个分片(比如 4,所以 id 1-1000 的用户转到一个分片,1001-2000 转到另一个分片等)并选择User.id作为分片键。由于用户表通常连接到其他表,我们将记录从引用给定用户或由它引用的表移动到相应的分片(这是一个很大的挑战,因为关系通常是可传递的,例如,表 A 可能引用 B 引用分片表C)。为了简化事情,我们可以决定将除 User 表之外的所有表完整复制到所有分片。到现在为止还挺好。

然后,想象Friends表(id, user_id,friend_id)包含有关谁是谁的朋友并引用User表的信息。用户 1001 有 2 个朋友,2002 和 3003,他们位于不同的分片上。所以如果我们需要获取用户 1001 个朋友的信息,我们将不得不执行 2 次跨分片连接。即使我们最初设法将所有相关用户放在同一个分片上,用户也可以从不同的分片添加新朋友。我们不能将这个朋友 4004 移动到用户 1001,因为来自同一分片 #5 的其他用户也可以将他作为朋友。

老实说,我无法弄清楚在执行分片时如何处理这种情况,而且我还没有看到任何资源对此进行解释。

join sharding relational-database database-partitioning

10
推荐指数
1
解决办法
988
查看次数

对 Azure Cosmos DB 中的分区键建立索引

假设我的容器中有以下数据:

{
    "id": "1DBF704E-1623-4844-DC86-EFA729A5C048",
    "firstName": "Wylie",
    "lastName": "Ramsey",
    "country": "AZ",
    "city": "Tucson"
}
Run Code Online (Sandbox Code Playgroud)

当我查询特定分区键时,我使用字段“id”作为项目 id,使用字段“country”作为分区键:

SELECT * FROM c WHERE c.country = "AZ"
Run Code Online (Sandbox Code Playgroud)

(获取“AZ”中的所有人员)

我应该添加“国家/地区”作为索引,还是默认获得它,因为我将“国家/地区”作为分区键?使用 SDK 时是否有区别(即:添加选项new PartitionKey("AZ"),然后发送如上所述的查询)?

database-partitioning azure-cosmosdb azure-cosmosdb-sqlapi

10
推荐指数
2
解决办法
3227
查看次数

Oracle中的动态表分区

我正在为我的应用程序构建数据库存储,该数据库存储包含一个包含大量数据量(数亿条记录)的表.我打算在日期字段上有一个索引,因为我将不时地在给定的时间段内对所有记录进行批量恢复(例如,检索第二天的所有记录,在午夜).

由于记录的数量巨大,性能是这个系统中的一个重要问题,我想知道是否有一种方法可以动态分区我的表,以便我可以更快地检索记录,创建和截断分区,因为它们不是需要更久.例如,在我处理完今天的记录之后,我将如何创建第二天的分区并将其与其余数据一起填充?

oracle dynamic database-partitioning

9
推荐指数
2
解决办法
3万
查看次数

优化Postgres时间戳查询范围

我有以下表和索引定义:

CREATE TABLE ticket
(
  wid bigint NOT NULL DEFAULT nextval('tickets_id_seq'::regclass),
  eid bigint,
  created timestamp with time zone NOT NULL DEFAULT now(),
  status integer NOT NULL DEFAULT 0,
  argsxml text,
  moduleid character varying(255),
  source_id bigint,
  file_type_id bigint,
  file_name character varying(255),
  status_reason character varying(255),
  ...
)
Run Code Online (Sandbox Code Playgroud)

我在created时间戳上创建了一个索引,如下所示:

CREATE INDEX ticket_1_idx
  ON ticket
  USING btree
  (created );
Run Code Online (Sandbox Code Playgroud)

这是我的疑问

select * from ticket 
where created between '2012-12-19 00:00:00' and  '2012-12-20 00:00:00'
Run Code Online (Sandbox Code Playgroud)

这个工作正常,直到记录数量开始增长(约500万),现在它将永远回归.

解释分析揭示了这一点:

"Index Scan using ticket_1_idx on ticket  (cost=0.00..10202.64 rows=52543 …
Run Code Online (Sandbox Code Playgroud)

postgresql indexing query-optimization database-partitioning postgresql-performance

9
推荐指数
1
解决办法
1万
查看次数

如何从MySQL中的分区中选择行

我将300MB表分区并尝试p0使用此命令从分区进行选择查询

SELECT * FROM employees PARTITION (p0);
Run Code Online (Sandbox Code Playgroud)

但我得到了以下错误

ERROR 1064 (42000): You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version for the right syntax to use near '(p0)' at line 1
Run Code Online (Sandbox Code Playgroud)

如何编写select查询以从特定分区获取数据?

mysql sql partitioning database-partitioning mysql-5.1

9
推荐指数
2
解决办法
3万
查看次数

如何在Django模型中集成postgresql 10/11声明表分区(即PARTITION BY子句)?

PostgreSQL 10引入了带子句的声明性表分区PARTITION BY,我想将它用于Django模型.

原则上我需要做的就是在Django ORM创建PARTITION BYCREATE TABLE语句末尾引入该子句.

CREATE TABLE measurement (
    city_id         int not null,
    logdate         date not null,
    peaktemp        int,
    unitsales       int
) PARTITION BY RANGE (logdate);
Run Code Online (Sandbox Code Playgroud)

是否可以将此子句插入模型中?我想也许有办法以某种方式将自定义SQL附加到ORM生成的查询中,例如使用Meta:

class Measurement(models.Model):
    ...
    class Meta:
        append = "PARTITION BY RANGE (logdate)"
Run Code Online (Sandbox Code Playgroud)

就我而言,上述情况是不可能的.我也查看了架构库,但它没有使用新的PARTITION BY子句.相反,它使用继承和触发器,因此代码不会建议我可以附加该子句的任何方式(它也不会用于其他数据库,例如MySQL).

我也通过添加ALTER TABLE...操作来定制迁移,例如:

operations = [
    migrations.RunSQL(
        "ALTER TABLE measurement PARTITION BY RANGE (logdate)",
    ),
] 
Run Code Online (Sandbox Code Playgroud)

不幸的是,PostgreSQL ALTER TABLE语句中似乎不支持上述(或类似)(至少尚未支持).

最后的想法是CREATE TABLE在发送查询之前检索Django模型生成的语句,例如模型sql = Measurement.get_statement() …

django postgresql database-partitioning

9
推荐指数
1
解决办法
502
查看次数