Giter Club home page Giter Club logo

copr-test's Introduction

tikv_logo

Build Status Coverage Status CII Best Practices

TiKV is an open-source, distributed, and transactional key-value database. Unlike other traditional NoSQL systems, TiKV not only provides classical key-value APIs, but also transactional APIs with ACID compliance. Built in Rust and powered by Raft, TiKV was originally created by PingCAP to complement TiDB, a distributed HTAP database compatible with the MySQL protocol.

The design of TiKV ('Ti' stands for titanium) is inspired by some great distributed systems from Google, such as BigTable, Spanner, and Percolator, and some of the latest achievements in academia in recent years, such as the Raft consensus algorithm.

If you're interested in contributing to TiKV, or want to build it from source, see CONTRIBUTING.md.

cncf_logo cncf_logo

TiKV is a graduated project of the Cloud Native Computing Foundation (CNCF). If you are an organization that wants to help shape the evolution of technologies that are container-packaged, dynamically-scheduled and microservices-oriented, consider joining the CNCF. For details about who's involved and how TiKV plays a role, read the CNCF announcement.


With the implementation of the Raft consensus algorithm in Rust and consensus state stored in RocksDB, TiKV guarantees data consistency. Placement Driver (PD), which is introduced to implement auto-sharding, enables automatic data migration. The transaction model is similar to Google's Percolator with some performance improvements. TiKV also provides snapshot isolation (SI), snapshot isolation with lock (SQL: SELECT ... FOR UPDATE), and externally consistent reads and writes in distributed transactions.

TiKV has the following key features:

  • Geo-Replication

    TiKV uses Raft and the Placement Driver to support Geo-Replication.

  • Horizontal scalability

    With PD and carefully designed Raft groups, TiKV excels in horizontal scalability and can easily scale to 100+ TBs of data.

  • Consistent distributed transactions

    Similar to Google's Spanner, TiKV supports externally-consistent distributed transactions.

  • Coprocessor support

    Similar to HBase, TiKV implements a coprocessor framework to support distributed computing.

  • Cooperates with TiDB

    Thanks to the internal optimization, TiKV and TiDB can work together to be a compelling database solution with high horizontal scalability, externally-consistent transactions, support for RDBMS, and NoSQL design patterns.

Governance

See Governance.

Documentation

For instructions on deployment, configuration, and maintenance of TiKV,see TiKV documentation on our website. For more details on concepts and designs behind TiKV, see Deep Dive TiKV.

Note:

We have migrated our documentation from the TiKV's wiki page to the official website. The original Wiki page is discontinued. If you have any suggestions or issues regarding documentation, offer your feedback here.

TiKV adopters

You can view the list of TiKV Adopters.

TiKV software stack

The TiKV software stack

  • Placement Driver: PD is the cluster manager of TiKV, which periodically checks replication constraints to balance load and data automatically.
  • Store: There is a RocksDB within each Store and it stores data into the local disk.
  • Region: Region is the basic unit of Key-Value data movement. Each Region is replicated to multiple Nodes. These multiple replicas form a Raft group.
  • Node: A physical node in the cluster. Within each node, there are one or more Stores. Within each Store, there are many Regions.

When a node starts, the metadata of the Node, Store and Region are recorded into PD. The status of each Region and Store is reported to PD regularly.

Quick start

Deploy a playground with TiUP

The most quickest to try out TiKV with TiDB is using TiUP, a component manager for TiDB.

You can see this page for a step by step tutorial.

Deploy a playground with binary

TiKV is able to run separately with PD, which is the minimal deployment required.

  1. Download and extract binaries.
$ export TIKV_VERSION=v7.5.0
$ export GOOS=darwin  # only {darwin, linux} are supported
$ export GOARCH=amd64 # only {amd64, arm64} are supported
$ curl -O  https://tiup-mirrors.pingcap.com/tikv-$TIKV_VERSION-$GOOS-$GOARCH.tar.gz
$ curl -O  https://tiup-mirrors.pingcap.com/pd-$TIKV_VERSION-$GOOS-$GOARCH.tar.gz
$ tar -xzf tikv-$TIKV_VERSION-$GOOS-$GOARCH.tar.gz
$ tar -xzf pd-$TIKV_VERSION-$GOOS-$GOARCH.tar.gz
  1. Start PD instance.
$ ./pd-server --name=pd --data-dir=/tmp/pd/data --client-urls="http://127.0.0.1:2379" --peer-urls="http://127.0.0.1:2380" --initial-cluster="pd=http://127.0.0.1:2380" --log-file=/tmp/pd/log/pd.log
  1. Start TiKV instance.
$ ./tikv-server --pd-endpoints="127.0.0.1:2379" --addr="127.0.0.1:20160" --data-dir=/tmp/tikv/data --log-file=/tmp/tikv/log/tikv.log
  1. Install TiKV Client(Python) and verify the deployment, required Python 3.5+.
$ pip3 install -i https://test.pypi.org/simple/ tikv-client
from tikv_client import RawClient

client = RawClient.connect("127.0.0.1:2379")

client.put(b'foo', b'bar')
print(client.get(b'foo')) # b'bar'

client.put(b'foo', b'baz')
print(client.get(b'foo')) # b'baz'

Deploy a cluster with TiUP

You can see this manual of production-like cluster deployment presented by @c4pt0r.

Build from source

See CONTRIBUTING.md.

Client drivers

If you want to try the Go client, see Go Client.

Security

Security audit

A third-party security auditing was performed by Cure53. See the full report here.

Reporting Security Vulnerabilities

To report a security vulnerability, please send an email to TiKV-security group.

See Security for the process and policy followed by the TiKV project.

Communication

Communication within the TiKV community abides by TiKV Code of Conduct. Here is an excerpt:

In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.

Social Media

Slack

Join the TiKV community on Slack - Sign up and join channels on TiKV topics that interest you.

License

TiKV is under the Apache 2.0 license. See the LICENSE file for details.

Acknowledgments

  • Thanks etcd for providing some great open source tools.
  • Thanks RocksDB for their powerful storage engines.
  • Thanks rust-clippy. We do love the great project.

copr-test's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

copr-test's Issues

ScalarFunction TimestampDiff is not supported in batch mode

The SQL

SELECT DATE( `col_char_2_key` ) AS field1 FROM `table0_int_autoinc` WHERE TIMESTAMPDIFF( MICROSECOND, `col_char_2_key`, ( UNIX_TIMESTAMP( NULL ) ) );

in sql/randgen/6_date_1.sql will fail when executing manually but never fail the whole test.

Expected:

[2020-04-16T09:57:55.737Z] 2020/04/16 17:57:55 2020/04/16 17:57:34 Test fail: Outputs are not matching.
[2020-04-16T09:57:55.737Z] Test case: sql/randgen-limit/6_date_1.sql
[2020-04-16T09:57:55.737Z] Statement: #151 -  SELECT DATE( `col_char_2_key` ) AS field1 FROM `table0_int_autoinc` WHERE TIMESTAMPDIFF( MICROSECOND, `col_char_2_key`, ( UNIX_TIMESTAMP( NULL ) ) ) LIMIT 1 /* QNO 154 CON_ID 164 */ ;
[2020-04-16T09:57:55.737Z] NoPushDown Output: 
[2020-04-16T09:57:55.737Z] field1
[2020-04-16T09:57:55.737Z] 
[2020-04-16T09:57:55.737Z] 
[2020-04-16T09:57:55.737Z] WithPushDown Output: 
[2020-04-16T09:57:55.737Z] Error 1105: other error: [components/tidb_query/src/batch/runner.rs:83]: BatchSelectionExecutor: Evaluate error: [components/tidb_query/src/rpn_expr/mod.rs:526]: ScalarFunction TimestampDiff is not supported in batch mode

ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1:4007' (61)

When following the instructions to run copr-test locally, I fail to connect tidb (WithPushDown)

...
...
+ Launching TiDB for WithPushDown test using config /Users/lijiarui/Works/pingcap/internship/tikv-test/copr-test/push-down-test/build/config/with_push_down/tidb.toml

  - Config content:
port = 4007
store = "tikv"
path = "127.0.0.1:4479"
socket = ""

[status]
report-status = false
  - Starting process...
/Users/lijiarui/Works/pingcap/internship/tikv-test/tidb/bin/tidb-server -config /Users/lijiarui/Works/pingcap/internship/tikv-test/copr-test/push-down-test/build/config/with_push_down/tidb.toml -log-file /Users/lijiarui/Works/pingcap/internship/tikv-test/copr-test/push-down-test/build/tidb_with_push_down.log -L warn
  - Sleep 10s to wait for TiDB to start

+ Waiting TiDB start up (NoPushDown)
+--------------------+
| Database           |
+--------------------+
| INFORMATION_SCHEMA |
| METRICS_SCHEMA     |
| PERFORMANCE_SCHEMA |
| mysql              |
| test               |
+--------------------+
  - TiDB startup successfully (NoPushDown)

+ Waiting TiDB start up (WithPushDown)
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1:4007' (61)
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1:4007' (61)
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1:4007' (61)

// pd log

[2022/07/17 20:16:12.722 -04:00] [WARN] [server.go:298] ["exceeded recommended request limit"] [max-request-bytes=157286400] [max-request-size="157 MB"] [recommended-request-bytes=1$
[2022/07/17 20:16:12.913 -04:00] [WARN] [store.go:1317] ["simple token is not cryptographically signed"]
[2022/07/17 20:16:12.992 -04:00] [WARN] [metrics.go:193] ["failed to get file descriptor usage"] [error="cannot get FDUsage on darwin"]
[2022/07/17 20:16:13.785 -04:00] [FATAL] [versioninfo.go:57] ["version string is illegal"] [error="[PD:semver:ErrSemverNewVersion]51ad29c is not in dotted-tri format: 51ad29c is not$

// tidb log

...
...
 100 [2022/07/17 20:17:56.024 -04:00] [WARN] [base_client.go:251] ["[pd] failed to get cluster id"] [url=http://127.0.0.1:4479] [error="[PD:client:ErrClientGetMember]error:rpc            error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 127.0.0.1:4479: connect: connection refused\" target:127.0.0.1:4479 status:       TRANSIENT_FAILURE: error:rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 127.0.0.1:4479: connect: connection refused\"        target:127.0.0.1:4479 status:TRANSIENT_FAILURE"]
 101 [2022/07/17 20:17:57.029 -04:00] [WARN] [base_client.go:251] ["[pd] failed to get cluster id"] [url=http://127.0.0.1:4479] [error="[PD:client:ErrClientGetMember]error:rpc            error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 127.0.0.1:4479: connect: connection refused\" target:127.0.0.1:4479 status:       TRANSIENT_FAILURE: error:rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 127.0.0.1:4479: connect: connection refused\"        target:127.0.0.1:4479 status:TRANSIENT_FAILURE"]
 102 [2022/07/17 20:17:58.034 -04:00] [WARN] [base_client.go:251] ["[pd] failed to get cluster id"] [url=http://127.0.0.1:4479] [error="[PD:client:ErrClientGetMember]error:rpc            error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 127.0.0.1:4479: connect: connection refused\" target:127.0.0.1:4479 status:       TRANSIENT_FAILURE: error:rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 127.0.0.1:4479: connect: connection refused\"        target:127.0.0.1:4479 status:TRANSIENT_FAILURE"]
 103 [2022/07/17 20:17:59.035 -04:00] [WARN] [store.go:82] ["new store with retry failed"] [error="[pd] failed to get cluster id"]
 104 [2022/07/17 20:17:59.035 -04:00] [FATAL] [terror.go:298] ["unexpected error"] [error="[pd] failed to get cluster id"] [stack="github.com/pingcap/tidb/parser/terror.MustNil\n\t/      Users/lijiarui/Works/pingcap/internship/tikv-test/tidb/parser/terror/terror.go:298\nmain.createStoreAndDomain\n\t/Users/lijiarui/Works/pingcap/internship/tikv-test/tidb/tidb-        server/main.go:299\nmain.main\n\t/Users/lijiarui/Works/pingcap/internship/tikv-test/tidb/tidb-server/main.go:204\nruntime.main\n\t/opt/homebrew/Cellar/go/1.18.2/libexec/src/         runtime/proc.go:250"] [stack="github.com/pingcap/tidb/parser/terror.MustNil\n\t/Users/lijiarui/Works/pingcap/internship/tikv-test/tidb/parser/terror/terror.go:298\nmain.             createStoreAndDomain\n\t/Users/lijiarui/Works/pingcap/internship/tikv-test/tidb/tidb-server/main.go:299\nmain.main\n\t/Users/lijiarui/Works/pingcap/internship/tikv-test/tidb/        tidb-server/main.go:204\nruntime.main\n\t/opt/homebrew/Cellar/go/1.18.2/libexec/src/runtime/proc.go:250"]

I tried to modify server/versioninfo/MustParseVersion to directly return semver.New(featuresDict[Version5_0]). However, the tidb still can not be connected. And the logs are as follows

// pd log

   1 [2022/07/17 20:26:40.544 -04:00] [WARN] [server.go:298] ["exceeded recommended request limit"] [max-request-bytes=157286400] [max-request-            size="157 MB"] [recommended-request-bytes=10485760] [recommended-request-size="10 MB"]
   2 [2022/07/17 20:26:40.738 -04:00] [WARN] [store.go:1317] ["simple token is not cryptographically signed"]
   3 [2022/07/17 20:26:40.819 -04:00] [WARN] [metrics.go:193] ["failed to get file descriptor usage"] [error="cannot get FDUsage on darwin"]
   4 [2022/07/17 20:26:45.041 -04:00] [WARN] [dynamic_config_manager.go:164] ["Dynamic config does not exist in etcd"]
   5 [2022/07/17 20:27:03.442 -04:00] [WARN] [grpclog.go:60] ["transport: http2Server.HandleStreams failed to read frame: read tcp 127.0.0.1:4479-         >127.0.0.1:58610: use of closed network connection"]
   6 [2022/07/17 20:27:03.443 -04:00] [WARN] [grpclog.go:60] ["transport: http2Server.HandleStreams failed to read frame: read tcp 127.0.0.1:4479-         >127.0.0.1:58609: use of closed network connection"]
   7 [2022/07/17 20:27:03.443 -04:00] [WARN] [grpclog.go:60] ["transport: http2Server.HandleStreams failed to read frame: read tcp 127.0.0.1:4479-         >127.0.0.1:58625: use of closed network connection"]
   8 [2022/07/17 20:27:03.443 -04:00] [WARN] [grpclog.go:60] ["transport: http2Server.HandleStreams failed to read frame: read tcp 127.0.0.1:4479-         >127.0.0.1:58626: use of closed network connection"]

// tidb log

...
[2022/07/17 20:27:23.480 -04:00] [ERROR] [kv.go:243] ["fail to load safepoint from pd"] [error="context deadline exceeded"]
  26 [2022/07/17 20:27:23.481 -04:00] [ERROR] [client.go:907] ["[pd] update connection contexts failed"] [dc=global] [error="rpc error: code =             Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 127.0.0.1:4479: connect: connection refused\""]
  27 [2022/07/17 20:27:23.951 -04:00] [ERROR] [base_client.go:144] ["[pd] failed updateMember"] [error="[PD:client:ErrClientGetLeader]get leader from      [http://127.0.0.1:4479] error"]
  28 [2022/07/17 20:27:26.819 -04:00] [ERROR] [base_client.go:144] ["[pd] failed updateMember"] [error="[PD:client:ErrClientGetLeader]get leader from      [http://127.0.0.1:4479] error"]
  29 [2022/07/17 20:27:29.481 -04:00] [ERROR] [kv.go:243] ["fail to load safepoint from pd"] [error="context deadline exceeded"]
  30 [2022/07/17 20:27:29.482 -04:00] [ERROR] [client.go:907] ["[pd] update connection contexts failed"] [dc=global] [error="rpc error: code =             Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 127.0.0.1:4479: connect: connection refused\""]
  31 [2022/07/17 20:27:29.482 -04:00] [ERROR] [client.go:792] ["[pd] create tso stream error"] [dc-location=global] [error="[PD:client:                    ErrClientCreateTSOStream]create TSO stream failed, retry timeout"]
  32 [2022/07/17 20:27:29.482 -04:00] [ERROR] [pd.go:236] ["updateTS error"] [txnScope=global] [error="[PD:client:ErrClientCreateTSOStream]create TSO      stream failed, retry timeout"]
  33 [2022/07/17 20:27:29.482 -04:00] [ERROR] [base_client.go:144] ["[pd] failed updateMember"] [error="[PD:client:ErrClientGetLeader]get leader from      [http://127.0.0.1:4479] error"]
  34 [2022/07/17 20:27:29.746 -04:00] [ERROR] [base_client.go:144] ["[pd] failed updateMember"] [error="[PD:client:ErrClientGetLeader]get leader from      [http://127.0.0.1:4479] error"]
  35 [2022/07/17 20:27:32.737 -04:00] [ERROR] [base_client.go:144] ["[pd] failed updateMember"] [error="[PD:client:ErrClientGetLeader]get leader from      [http://127.0.0.1:4479] error"]
  36 [2022/07/17 20:27:32.737 -04:00] [WARN] [backoff.go:158] ["pdRPC backoffer.maxSleep 40000ms is exceeded, errors:\nloadRegion from PD failed,          key: \"6D426F6F7473747261FF704B657900000000FB0000000000000073\", err: rpc error: code = Unavailable desc = connection error: desc = \"transport:      Error while dialing dial tcp 127.0.0.1:4479: connect: connection refused\" at 2022-07-17T20:27:23.951276-04:00\nloadRegion from PD failed, key:       \"6D426F6F7473747261FF704B657900000000FB0000000000000073\", err: rpc error: code = Unavailable desc = connection error: desc = \"transport:           Error while dialing dial tcp 127.0.0.1:4479: connect: connection refused\" at 2022-07-17T20:27:26.819438-04:00\nloadRegion from PD failed, key:       \"6D426F6F7473747261FF704B657900000000FB0000000000000073\", err: rpc error: code = Unavailable desc = connection error: desc = \"transport:           Error while dialing dial tcp 127.0.0.1:4479: connect: connection refused\" at 2022-07-17T20:27:29.746725-04:00\nlongest sleep type: pdRPC, time:      29039ms"]
  37 [2022/07/17 20:27:32.737 -04:00] [FATAL] [session.go:2951] ["check bootstrapped failed"] [error="[tikv:9001]PD server timeout"] [stack="github.       com/pingcap/tidb/session.getStoreBootstrapVersion\n\t/Users/lijiarui/Works/pingcap/internship/tikv-test/tidb/session/session.go:2951\ngithub.com/     pingcap/tidb/session.BootstrapSession\n\t/Users/lijiarui/Works/pingcap/internship/tikv-test/tidb/session/session.go:2719\nmain.                       createStoreAndDomain\n\t/Users/lijiarui/Works/pingcap/internship/tikv-test/tidb/tidb-server/main.go:301\nmain.main\n\t/Users/lijiarui/Works/          pingcap/internship/tikv-test/tidb/tidb-server/main.go:204\nruntime.main\n\t/opt/homebrew/Cellar/go/1.18.2/libexec/src/runtime/proc.go:250"]

Provide a better comparison utility to check query results

Current check can't work correctly for order by + limit queries :
MySQL specification doesn't guaratee the order of identical values.
Order by alone will generate sort operator, and will execute in TiDB only.
While order by + limit will generate two level TopN operators, one in coprocessor, one in TiDB, which might introduce implementation diefferences. And they are all right according to MySQL specification. But different orders of identical values will fail our copr test.
https://dev.mysql.com/doc/refman/5.6/en/limit-optimization.html

One current workaround pr, which removed limit operator, to pass the test. #162

expectNoErr PANIC

[2020-04-18T16:43:31.746Z] 2020/04/19 00:43:31 Error 1690: DOUBLE value is out of range in 'pow(0, -1)'
[2020-04-18T16:43:31.747Z] panic: Error 1690: DOUBLE value is out of range in 'pow(0, -1)'
[2020-04-18T16:43:31.747Z] 
[2020-04-18T16:43:31.747Z] 
[2020-04-18T16:43:31.747Z] goroutine 40 [running]:
[2020-04-18T16:43:31.747Z] log.Panicln(0xc015be1f38, 0x1, 0x1)
[2020-04-18T16:43:31.747Z] 	/usr/local/go/src/log/log.go:352 +0xac
[2020-04-18T16:43:31.747Z] main.expectNoErr(...)
[2020-04-18T16:43:31.747Z] 	/home/jenkins/agent/workspace/tidb_ghpr_integration_copr_test/copr-test/push-down-test/src/util.go:111
[2020-04-18T16:43:31.747Z] main.runSingleStatement(0xc002649f6f, 0x122, 0x792, 0xc007a0cfc0, 0xc0145e80c0, 0x1)
[2020-04-18T16:43:31.747Z] 	/home/jenkins/agent/workspace/tidb_ghpr_integration_copr_test/copr-test/push-down-test/src/main.go:170 +0x3b4
[2020-04-18T16:43:31.747Z] main.runStatements(0xc0145e80c0, 0x7ffe3fce030d, 0x37, 0xc0175ee000, 0xbb3, 0xbb3)
[2020-04-18T16:43:31.747Z] 	/home/jenkins/agent/workspace/tidb_ghpr_integration_copr_test/copr-test/push-down-test/src/main.go:151 +0xb2
[2020-04-18T16:43:31.747Z] created by main.runTestCase
[2020-04-18T16:43:31.747Z] 	/home/jenkins/agent/workspace/tidb_ghpr_integration_copr_test/copr-test/push-down-test/src/main.go:144 +0x350
[2020-04-18T16:43:31.747Z] + Test finished
[2020-04-18T16:43:31.747Z]   - /home/jenkins/agent/workspace/tidb_ghpr_integration_copr_test/copr-test/push-down-test/build/push_down_test_bin exit code is 2

Some errors do not occur immediately after Query:

rows, err := db.Query(stmt)
if err != nil {

Instead, they will occur during the Next calls:
for rows.Next() {
tmp := make([][]byte, len(cols))
for i := 0; i < len(args); i++ {
args[i] = &tmp[i]
}
err := rows.Scan(args...)
if err != nil {
return nil, errors.Trace(err)
}
data = append(data, ByteRow{tmp})
}
err = rows.Err()
if err != nil {
return nil, errors.Trace(err)
}

then PANIC here:
byteRows, err := SqlRowsToByteRows(rows)
expectNoErr(err)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.