在数据库设计中,当考虑主键时,与Long数据类型相比,使用UUID有哪些优点和缺点?
我遇到了两个不同的教程,分别实现了它们,我只是好奇哪一个更好。
桌子
create table students (
id serial primary key,
g int,
firstname text,
lastname text,
middlename text,
address text,
bio text,
dob date,
id1 int,
id2 int,
id3 int,
id4 int,
id5 int,
id6 int,
id7 int,
id8 int,
id9 int
);
insert into students (g,
firstname,
lastname,
middlename,
address ,
bio,
dob,
id1 ,
id2,
id3,
id4,
id5,
id6,
id7,
id8,
id9)
select
random()*100,
substring(md5(random()::text ),0,floor(random()*31)::int),
substring(md5(random()::text ),0,floor(random()*31)::int),
substring(md5(random()::text ),0,floor(random()*31)::int),
substring(md5(random()::text ),0,floor(random()*31)::int),
substring(md5(random()::text ),0,floor(random()*31)::int),
now(),
random()*100000,
random()*100000,
random()*100000,
random()*100000,
random()*100000,
random()*100000,
random()*100000,
random()*100000,
random()*100000
from generate_series(0, 50000000);
我填充了大约 2000 万行。
现在我创建了覆盖索引。
create index stu_g_idx on students(g) include (id);
即使 vacuum (analyze, verbose, full);
在那之后为什么 postgres 查询仍然命中堆?
explain (analyze, buffers)
select id
from students
where g > 14 and g < 95
order by g desc
limit 1;
结果是:
-------------------------------------------------------------------------------------------------------------------------------------------------
Limit (cost=0.43..0.56 rows=1 width=8) (actual time=0.049..0.050 rows=1 loops=1)
Buffers: shared hit=4
-> Index Only Scan Backward using s_g_idx on students (cost=0.43..606253.57 rows=4799436 width=8) (actual time=0.046..0.047 rows=1 loops=1)
Index Cond: ((g > 14) AND (g < 95))
Heap Fetches: 1
Buffers: shared hit=4
Planning:
Buffers: shared hit=89 read=10 dirtied=1
Planning Time: 1.275 ms
Execution Time: 0.102 ms
(10 rows)
有人可以解释这是为什么吗?我正在努力学习内部知识。
我试图从购物车集合的项目数组中查找(并更新)特定对象。购物车文档网看起来像这样
{
_id: ObjectId("661fb9ddc2b236ae8703ba92"),
display_id: '38bd6126-02a1-47b9-b567-00aaf2eb076f',
user_id: ObjectId("661137f22a31832ceb92ddbc"),
items: [
{
product_id: ObjectId("6622376051d5886f39ac7365"),
size: ObjectId("660d444d0d7716ee24129675"),
qty: 3
},
{
product_id: ObjectId("662214f8cc5306f999369e99"),
size: ObjectId("660d444d0d7716ee24129675"),
qty: 2
},
{
product_id: ObjectId("662214f8cc5306f999369e99"),
size: ObjectId("660d444d0d7716ee24129674"),
qty: 2
}
],
__v: 4
}
我试图运行的查询是
db.carts.find({user_id: new ObjectId("661137f22a31832ceb92ddbc"), "items.product_id": new ObjectId("662214f8cc5306f999369e99"), "items.size":new ObjectId("660d444d0d7716ee24129675")}, {"items.$":1})
或者在猫鼬中
const doc = await Cart.findOne({
user_id: user_id,
"items.product_id": product_id,
"items.size": oldSize
},{"items.$":1})
理想情况下它应该返回这个对象:
{
product_id: ObjectId("662214f8cc5306f999369e99"),
size: ObjectId("660d444d0d7716ee24129675"),
qty: 2
}
但它返回这个:
{
product_id: ObjectId("6622376051d5886f39ac7365"),
size: ObjectId("660d444d0d7716ee24129675"),
qty: 3
},
请告诉我我做错了什么。
目前我正在使用simple-datatables开发 vue js 3
这是代码和盒子
这是一个简单的例子,每次我尝试使用“详细信息”按钮时都不起作用
功能:
const handleClickDetails = () => {
console.log("Here....... ");
alert("Here!");
};
在 HTML 上:
<tr>
<td class="td-action">
<button @click="handleClickDetails"> Detalles </button>
</td>
<td scope="col"> name 1 </td>
</tr>
怎么了??
我需要使用 pg_dump 创建 Postgres 数据库转储。数据库位于 Kubernetes pod 中。我正在尝试以目录格式获取转储,而不仅仅是单个 .sql 文件。但我不明白如何指定目录。
当我尝试这个命令时:
kubectl exec patroni-0 -- bash -c "pg_dump -U username db_name --format=d" > db_dump_folder
我收到一个错误:
pg_dump: [directory archiver] no output directory specified
command terminated with exit code 1
提前致谢!
我尝试在 Vespa 中使用 HNSW 索引超过 2 亿个文档,但随着文件数量的增加,它会消耗大量内存。我的服务器有 64GB 内存,我估计在 Vespa 中存储所有数据需要 750GB。Vespa 有没有办法在不添加更多内存或服务器的情况下有效管理这个 750GB 的数据集?
理想情况下,我想要能够保持搜索质量、避免向量维数或 HNSW 参数减少的解决方案。
我搜索了官方文档但没有找到合适的答案。当达到内存限制时,会发生提要阻塞,或者交换磁盘的一切都变得非常慢。有谁知道如何有效地处理这个问题?
作为新手,我有一个关于 Cassandra 的问题。我想知道是否有可能以某种方式使用 contains 语句进行查询(我发现 in 语句可能不是适合大量数据的最佳选择),该语句接受一系列事物。
像这样的东西:
SELECT * FROM table WHERE column CONTAINS('valueA', 'valueB');
在网上搜索时,我读到这是不可能的,但如果我使用太多值,我将不得不编写 60 个 CONTAINS,并且我猜查询会太重。
所以我想知道 Cassandra 是否可以做到这一点,或者有解决方法。谢谢!
我正在寻找一种安全的方法来在 Web 服务器(在我的例子中是Node.js )的后端保存凭据(例如 SSH 凭据)。
我已经考虑过散列,但是每次都必须输入密码,并且不需要再次输入密码它应该可以工作。
假设我有一个名为 的表User (Entity)
,其属性为_id, name, email, user_type [enum: "normal user", "admin", "volunteer"], address, and age
。另外,我还有另一个名为 的实体Project (Entity)
,其属性为_id, title, start date, end date, and created_by
。管理员类型用户只能创建项目,因此其他user_type
用户只能查看它。那么如何根据这个条件表示用户和项目实体之间的关系呢?我不想创建 3 个独立的实体 NormalUser、Admin 和 Volunteer,还是应该将它们分开?所有属性都相同,但权限不同。我能做些什么?
我有两张桌子:
桌子apartments
:
房屋编号 | 房屋_街道 |
---|---|
1 | 波莫纳 |
2 | 波莫纳 |
1 | 迪拜 |
2 | 迪拜 |
桌子streets
:
街道名称 | 总建筑数 |
---|---|
迪拜 | 无效的 |
波莫纳 | 无效的 |
我希望该列被表中每个唯一项(迪拜、波莫纳……)下的总价值streets.total_buildings
所占据。COUNT
house_no
house_street
apartments
streets.street_name
应代表house_street
表中的列apartments
,并streets.total_buidlings
应在表公寓中的每个条目时自动更新。
我尝试使用代码来提取表公寓中 house_street 下 house_no 值的数量:
SELECT count(house_street), house_street
FROM apartments
GROUP BY house_street
我得到了结果:
数数 | 房屋_街道 |
---|---|
2 | 波莫纳 |
2 | 迪拜 |
但这并不能完全解决问题吗?