我需要向mongodb集合插入一个新字段(列),该集合现在有5246个文档.该字段应自动递增.所以我使用for循环.我的查询如下`
for(i=1;i<=5246;i++) {
db.coll.update({},{$set:{"new_field":i}},false,true)
};
Run Code Online (Sandbox Code Playgroud)
但我的不好输出是,
{new_field:5246},{new_field:5246},{new_field:5246},.......
Run Code Online (Sandbox Code Playgroud)
查询有问题吗?
我想完成一项特殊的任务,但我没有找到任何特定的方法来做到这一点.假设我有一个用于发送邮件的应用程序.我在mongo的一个集合中记录了这些邮件.使用这个应用程序,我现在可以发送邮件或可以安排邮件将来.集合中的文档结构如下:
{
'_id' : 123456789,
'to_email' : 'xyz@gmail.com'
'from_email' : 'abc@gmail.com'
'subject': 'some subject'
'type' : '<1 if normal and 2 if scheduled>',
'createdDate' '<date when mail was sent or the request was created>',
'scheduledDate' : '<time for which mail is scheduled>'
.. and many more key-value pairs
}
Run Code Online (Sandbox Code Playgroud)
scheduledDate字段可以是零或任何日期,具体取决于是否已计划.我不想保留超过2天的数据,所以我在'createdDate'上创建了一个TTL索引,为期2天.但我也不想删除将来安排的行或请求.我正在寻找某种条件TTL,但无法找到任何这样的解决方案.
是否有任何可用的条件TTL或任何其他方式在mongodb中做到这一点.
我想创建一个TTL,其工作方式如下:
if(requestType!=2 and createdDate < -2days)
delete row;
Run Code Online (Sandbox Code Playgroud)
或者有没有办法可以使用任何语言对某些文档进行更改,以便它们不会过期.
编辑:我通过在预定邮件的情况下使用scheduledDate和requestDate的相同值解决了这个问题.
我有一个 java 应用程序,它使用 Liquibase 进行迁移,到目前为止一直使用 MySQL 来运行测试用例。
我想使用 h2 数据库运行测试用例。为此,我对 JDBC 配置进行了必要的更改。但是当我运行时mvn test,出现以下错误:
索引“idx_workflow_id”已存在;SQL语句:
在调试时,我发现两个表具有相同名称的索引:idx_workflow_id,并且 h2 数据库具有数据库中具有唯一索引名称的一些限制。
现在的问题是数据库结构已经存在于 staging 和 prod 中,并且无法更改索引名称。
有什么方法可以运行 h2 数据库的迁移,而不创建索引或忽略它们。或者进行一些配置更改,这将允许数据库中具有相同名称的索引。
配置:
database:
driverClass: org.h2.Driver
url: "jdbc:h2:mem:my_db;MODE=MySQL;DATABASE_TO_UPPER=false;IGNORECASE=TRUE;DB_CLOSE_DELAY=-1"
maxWaitForConnection: 1s
minSize: ${MIN_DB_CONNECTIONS:-10}
maxSize: ${MAX_DB_CONNECTIONS:-100}
defaultTransactionIsolation: READ_COMMITTED
checkConnectionWhileIdle: false
checkConnectionOnBorrow: true
checkConnectionOnConnect: true
validationQuery: "SELECT 1"
properties:
hibernate.dialect: org.hibernate.dialect.H2Dialect
hibernate.show_sql: false
hibernate.hbm2ddl.auto: none
hibernate.session.events.log: false
hibernate.generate_statistics: true
org.hibernate.stat: INFO
charSet: UTF-8
Run Code Online (Sandbox Code Playgroud) 我以日期时间格式存储了happyHours的酒店.现在我想取所有happyHours大于当前时间的酒店.
根据我的知识,我知道有获取结果的日期比较,但这将比较整个日期时间对象.
有没有办法比较时间?
db中的Happyhours日期对象示例:
"happyHours" : {
"mon" : [
{
"startTime" : ISODate("2016-04-11T06:30:59.000Z"),
"endTime" : ISODate("2016-04-11T14:30:59.000Z")
}
],
"tue" : [
{
"startTime" : ISODate("2016-04-11T06:30:59.000Z"),
"endTime" : ISODate("2016-04-11T14:30:59.000Z")
}
],
"wed" : [
{
"startTime" : ISODate("2016-04-11T06:30:59.000Z"),
"endTime" : ISODate("2016-04-11T14:30:59.000Z")
}
],
"thu" : [
{
"startTime" : ISODate("2016-04-11T06:30:59.000Z"),
"endTime" : ISODate("2016-04-11T14:30:59.000Z")
}
],
"fri" : [
{
"startTime" : ISODate("2016-04-11T06:30:59.000Z"),
"endTime" : ISODate("2016-04-11T14:30:59.000Z")
}
],
"sat" : [
{
"startTime" : ISODate("2016-04-11T06:30:59.000Z"),
"endTime" : ISODate("2016-04-11T14:30:59.000Z")
}
],
"sun" …Run Code Online (Sandbox Code Playgroud) 我正在努力将我的应用程序迁移到 Kubernetes。我正在使用 EKS。
我想将我的 Pod 分布到不同的节点,以避免出现单点故障。我读到了pod-affinityandanti-affinity和requiredandpreferred模式。
这个答案提供了一个非常好的方法来实现这一点。
但我的疑问是,假设我有 3 个节点,其中 2 个节点已满(资源方面)。如果我使用requiredDuringSchedulingIgnoredDuringExecution,k8s 将启动新节点并将 Pod 分发到每个节点。如果我使用preferredDuringSchedulingIgnoredDuringExecution,它将检查首选节点,并且不会找到不同的节点,只会将所有 Pod 部署在第三个节点上。在这种情况下,它将再次成为单点故障。
我该如何解决这种情况?
我能想到的一种方法是拥有一个超额配置的集群,这样总会有一些额外的节点。
第二种方法,我不知道如何做到这一点,但我认为应该有一种同时使用requiredDuringSchedulingIgnoredDuringExecution和 的方法preferredDuringSchedulingIgnoredDuringExecution。
谁能帮我这个?我错过了什么吗?在这种情况下人们如何工作?
我是 Kubernetes 的新手,所以如果我错了或者遗漏了什么,请随时纠正我。
提前致谢
笔记:
我在同一节点上运行几个类似的 pod 没有问题,只是不希望所有 pod 都在同一节点上运行,因为只有一个节点可供部署。
我在 Oracle Linux(主机)上运行多个 LXC 容器,并在这些容器内运行 EBS 应用程序。
现在我每5台主机上就有10多个容器。
我正在寻找管理这些容器的解决方案。研究告诉我,Kubernetes 是一个用于管理容器并用它执行其他一些活动(例如自动缩放等)的解决方案。
但 Kubernetes 与 LXD 一起用于 lxc 容器。
有什么方法可以直接使用 Kubernetes 管理 lxc 容器吗?
任何帮助将非常感激!
谢谢 !!
我有一种情况,我计划在 Kubernetes 集群内使用两个单独的 traefik 入口控制器。
我有一些 URL,我希望只能通过 VPN 访问,而很少有一些 URL 可以公开访问。
在当前的架构中,我有一个 traefik-ingress 控制器和两个独立的 ALB,一个内部的,一个面向互联网的,都指向 traefik。
假设我有一个 URLpublic.example.com和private.example.com. public.example.com指向面向互联网的 ALB,private.example.com指向内部 ALB。但是,如果有人知道 的指向public.example.com并指向private.example.com他的相同指向/etc/hosts,他将能够访问我的私人网站。
为了避免这种情况,我计划运行两个单独的 traefik-ingress-controller,一个仅提供私有 URL 和一个公共 URL。这可以做到吗?或者有没有其他方法可以避免这种情况
security kubernetes traefik kubernetes-ingress traefik-ingress
我正在创建一个用于发送邮件的googlesheet插件。为了发送邮件,我正在使用sendgrid。我找不到用于使用Google Appscript发送邮件的任何文档或示例代码。这是我正在使用的代码,但这不好。
var data = {
"api_user":"username",
"api_key":"ioioi",
"to":[],
"tonnage":[],
"cc":[],
"ccname":[],
"bcc":[],
"subject":sub,
"from":from,
"html":htmlBody
}
var headers = { "Accept":"application/json",
"Content-Type":"application/json"
};
data = JSON.stringify(data);
var options = {
"method": "POST",
"payload": data,
"headers": headers,
"muteHttpExceptions": true
};
var res = UrlFetchApp.fetch("https://api.sendgrid.com/api/mail.send.json", options);
Run Code Online (Sandbox Code Playgroud)
有没有人有任何想法或代码使用googl appscript通过sendgrid发送电子邮件?
我正在阅读文档并尝试使用Redis,并遇到了HSET和HMSET命令。而且我找不到它们之间的任何区别,我尝试搜索并发现以下问题,
并接受答案:
HMSET类似于HSET,但是它允许一次设置多个字段/值对。
但是当我尝试时,HSET还允许一次设置多个字段/值对。
请查看下面的屏幕截图,对我来说,两者似乎相同:
谁能解释一下两者之间的区别。或用例,其中一个应该比另一个使用。
谢谢
我有一个密钥列表,想删除所有密钥。没有模式匹配,没什么,只是简单的删除。我不想运行循环,因为大约有3-4k键。
我试图将列表传递到删除功能,但没有用
redis_keys = [key1,key2,key3,key4....keyn]
redis.delete(redis_keys)
Run Code Online (Sandbox Code Playgroud)
在文档中显示
但不是如何传递多个密钥。同样,所有问题都与在将键与模式匹配时删除有关,但与可用的确切键无关。
所以我只想将文本放置在抽屉标题的左下角,并减少抽屉标题的高度
drawer: new Drawer
(
child: ListView
(
children: <Widget>
[
new DrawerHeader
(
child: Text("Drawer Header"),
decoration: BoxDecoration
(
color: Colors.blueGrey
),
)
],
),
),
Run Code Online (Sandbox Code Playgroud)
我正在使用 Exec 探针添加活性探针和就绪探针。
我的配置如下:
readinessProbe:
exec:
command: "/usr/bin/jps -l | grep QueueProcess"
periodSeconds: 10
failureThreshold: 2
successThreshold: 2
Run Code Online (Sandbox Code Playgroud)
当上面的方法不起作用时。我对此进行了修改并尝试了:
readinessProbe:
exec:
command: ["/usr/bin/jps", "-l", "|", "grep","QueueProcess"]
periodSeconds: 10
failureThreshold: 2
successThreshold: 2
Run Code Online (Sandbox Code Playgroud)
运行时kubectl describe pod,得到以下输出:
Normal Created 37s kubelet Created container app1
Normal Started 37s kubelet Started container app1
Warning Unhealthy 6s (x3 over 26s) kubelet Readiness probe failed: invalid argument count
usage: jps [-help]
jps [-q] [-mlvV] [<hostid>]
Definitions:
<hostid>: <hostname>[:<port>]
Run Code Online (Sandbox Code Playgroud)
我尝试了另一个应用程序,我正在其中运行grpcurl来调用运行状况检查:
readinessProbe:
exec:
command: …Run Code Online (Sandbox Code Playgroud) 出于某些警报和监控目的,我正在尝试获取 RDS cloudwatch 指标。大约有 50 个 RDS 实例,并且希望在一个 API 调用中获取所有这些实例的指标(我使用的是 boto3)。这是我的代码:
response = cloudwatch_client.get_metric_data(
MetricDataQueries=[
{
'Id': 'fetching_data_for_something',
'MetricStat': {
'Metric': {
'Namespace': 'AWS/RDS',
'MetricName': 'FreeStorageSpace',
'Dimensions': [
{
'Name': 'DBInstanceIdentifier',
'Value': '*'
},
]
},
'Period': 300,
'Stat': 'Average'
},
'ReturnData': True
},
],
StartTime=datetime(2019, 6, 11,13,0,0),
EndTime=datetime(2019, 6, 11,13,20,00),
ScanBy='TimestampDescending',
MaxDatapoints=123
)
Run Code Online (Sandbox Code Playgroud)
但这返回一个空结果,但是当我搜索特定的数据库实例时,它返回结果。这是工作:
'Dimensions': [
{
'Name': 'DBInstanceIdentifier',
'Value': 'name_of_db'
},
]
Run Code Online (Sandbox Code Playgroud)
但是,这不是:
'Dimensions': [
{
'Name': 'DBInstanceIdentifier',
'Value': '*'
},
]
Run Code Online (Sandbox Code Playgroud)
有什么办法可以做到这一点吗?一次获取所有数据库的指标?
amazon-web-services amazon-rds amazon-cloudwatch boto3 amazon-cloudwatch-metrics
kubernetes ×4
mongodb ×3
redis ×2
amazon-eks ×1
amazon-rds ×1
android ×1
boto3 ×1
containers ×1
database ×1
exec ×1
flutter ×1
h2 ×1
indexing ×1
java ×1
javascript ×1
lxc ×1
mysql ×1
pipe ×1
python ×1
security ×1
sendgrid ×1
time ×1
traefik ×1